프로세스(현재 실행 중인 프로그램)가 실행되면 커널 영역에 이들을 구분하는 PCB가 생성 된다.
∎ PCB
- 운영체제는 여러 프로세스들을 CPU의 자원에 골고루 분배하기 위해, 프로세스들을 관리하는 자료구조가 필요한데, 이것이 프로세스 제어 블록(PCB)이다.
- 프로세스와 관련된 정보가 저장되어 있다.
- PCB는 커널 영역에 생성되기 때문에 필요성이 끝나면 삭제 된다.
- PCB에는 PID(식별 번호), 자신의 차례가 오면 복원하기 위해 작업을 저장해 둔 레지스터 값, 프로세스의 현재 상태, CPU 스케줄링 정보, 메모리 저장 위치를 알려주는 메모리 관리 정보, 어떤 파일을 열고 어떤 입출력 장치를 사용했는지에 대한 목록들이 담겨 있다.
∎ 문맥 교환
프로세스들이 돌아가며 자원을 할당 받아 사용할 때, 기존 정보들을 백업해두고 차례가 다시 돌아왔을 때, 문맥들을 복구한다.
프로세스들이 차례대로 문맥 교환이 일어난다.
∎ 사용자 영역
- 코드 영역 : 기계어로 이루어진 명령어가 저장됨 (정적 할당 영역)
- 데이터 영역 : 프로그램이 실행되는 동안 유지되는 전역 변수가 있다. (정적 할당 영역)
- 힙 영역 : 프로그래머가 직접 할당해 사용하는 저장 공간, 메모리 공간을 반환해 메모리 누수가 발생하지 않도록 해야한다. (동적 할당 영역)
- 스택 영역 : 데이터를 일시적으로 저장하는 공간, 매개 변수, 지역 변수가 있다. (동적 할당 영역)
∎ 다음 프로세스 실행 (계층구조)
- 프로세스들은 이어지는 작업들을 위해 시스템 호출로 자식 프로세스들을 생성.
- 부모 프로세스가 fork 시스템 호출로 자신의 복사본을 만들어 내고, 자식 프로세스는 exec 시스템 호출로 복사된 영역을 새로운 프로그램으로 덮어쓴다.
- 프로세스 생성 기법 Fork-exec
∎ 스레드 (동시에 실행시킬 때)
- 프로세스 안에서 돌아가는 실행 흐름의 단위들
- 보통 멀티 스레드 프로세스 이다. (여러 명령어 동시 실행 가능)
- 스레드마다 자신의 ID, 레지스터 값, 스택 등을 가지고 있다. (최소한의 정보들)
- 프로세스의 자원을 공유한다. (힙 영역, 데이터 영역, 코드 영역을 같이 사용)
- 요즘은 CPU에게 스레드 단위로 넘겨 프로그램을 실행시킨다.
∎ 멀티 스레드
- 하나의 프로세스에 여러 스레드가 실행
- PCB는 한개로 사용
- 장점 : 데이터 영역, 힙 영역, 코드 영역을 공유하므로 협력과 통신에 유리
- 단점 : 때로는 문제 발생
∎ 멀티 프로세스
- 하나의 스레드로 이루어진 프로세스들 여러개 실행
- 데이터 영역, 힙 영역, 코드 영역을 공유하지 않는다.
- 쓰기 시 복사 기법으로 메모리 낭비는 방지할 수 있다.
'CS 지식 > 운영체제' 카테고리의 다른 글
공유 자원 동기화 (0) | 2024.08.13 |
---|---|
메모리 - 커널 영역, 사용자 영역 (0) | 2024.08.13 |
CPU 스케줄링 알고리즘 (1) | 2024.08.13 |
운영체제의 역할 (0) | 2024.08.13 |
인터럽트 - CPU를 비동기적으로 (0) | 2024.08.09 |