-
[OS] Process와 ThreadCS/Operating System 2021. 9. 20. 18:37
이 포스팅은 세미나를 위해 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS를 참고하여 작성하였습니다.
프로세스 (Process)
- 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다.
- 운영체제로부터 주소 공간, 파일, 메모리 등을 할당 받는다.
- 프로세스의 메모리 영역은 텍스트(코드), 데이터, 스택, 힙 영역으로 나눌 수 있다.
- 텍스트 (Text): 실행 파일을 구성하는 명령어들이 적재되는 메모리 영역
- 데이터 (Data): 전역 변수와 정적 변수가 저장되는 영역
- 스택 (Stack): 함수 호출과 관계되는 지역변수, 매개변수, 리턴 주소 등이 저장된다. 함수 호출 시 생성되고 종료되면 반환된다.
- 힙 (Heap): 메모리를 동적으로 할당할 때 사용하는 메모리 영역
프로세스 제어 블록(Process Control Block, PCB)
- 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조
- 프로세스의 생성과 동시에 고유한 PCB가 운영체제에 의해 생성됨
- 프로세스가 CPU를 할당받아 처리하다가 프로세스 전환이 발생한다 (Context switching). 이떄 진행하던 작업의 진행 상황을 모두 PCB에 저장하고 CPU를 반환하게 된다. 이후 CPU를 다시 할당받게 되면 PCB에 저장되어 있던 정보를 불러와 다시 작업을 시작한다.
PCB에 저장되는 정보
- 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
- 프로세스 상태 (Process state) : new, ready, running, waiting, terminated 등의 상태를 저장
- 프로그램 카운터 (PC) : 프로세스가 다음에 실행할 명령어의 주소
- CPU 레지스터
- CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
- 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등
스레드 (Thread)
- 프로세스의 실행 단위 -> 한 프로세스 내에서 동작되는 여러 실행 흐름
- 프로세스 내의 주소 공간이나 자원을 공유함 -> 코드, 데이터, 힙 영역과 열린 파일, 신호와 같은 운영체제 자원들을 공유함
- 멀티스래딩 (Multithreading): 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것
- 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 가지고 있음
스택을 스레드마다 독립적으로 할당하는 이유
스택은 함수 호출 시 전달되는 매개변수, 리턴될 주소값 및 지역 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 독립적인 실행 흐름이 추가되는 것이다. 따라서 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.
PC 레지스터를 스레드마다 독립적으로 할당하는 이유
PC 레지스터는 스레드가 명령어의 어디까지 수행하였는지를 나타내는 레지스터 값이다. 스레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 선점 당한다(Context switching). 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행하였는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당한다.
'CS > Operating System' 카테고리의 다른 글
[OS] Synchronization과 Critical-Section Problem (0) 2021.12.01 [OS] Synchronization과 Asynchronization (0) 2021.09.20 [OS] CPU Scheduler (0) 2021.09.20 [OS] Scheduler (0) 2021.09.20 [OS] Multithread (0) 2021.09.20