Process란 무엇인가
프로세스란 실행 중인 한 프로그램을 의미하며, 쓰레드(Thread) 다음으로 큰 실행 단위입니다.
단위의 크기를 따진다면, 프로그램 > 프로세스 > 쓰레드 라고 볼 수 있습니다.
job이나 task라는 이름으로도 불립니다.
각 프로세스는 독립적이며 한 프로세스에서 다른 프로세스에 접근하는 것은 금지되어 있습니다.
Process의 메모리 구조
한 프로세스는 다음과 같은 영역들로 구성되어 있습니다.
Text (Code) : 기계어 집합
Data : 전역 변수 영역
Heap : 동적 할당 변수 영역
Stack : 지역 변수 영역
PCB (Process Control Block)
PCB란 Kernel Process에 저장되는 프로세스의 정보를 뜻합니다.
Kernel Process 또한 일반적인 프로세스와 동일한 구조를 가지고 있으며,
현재 실행 중인 모든 프로세스의 정보를 테이블 형태로 data 영역에 저장하고 있습니다.
다음은 PCB에 저장되는 주요 정보들입니다.
process state : 현재 프로세스의 상태
process number : 프로세스 식별자 (pid)
program counter : 다음 명령줄의 주소
registers : CPU register의 값
CPU scheduling information : CPU 스케쥴링의 정보
Memory management information : 메모리 위치 등의 정보
I/O status information : 프로세스에 할당된 I/O Device들의 정보와 연 파일의 목록
Process State
ready : CPU의 사용을 기다리는 상태
running : CPU에서 명령을 실행 중인 상태
waiting : I/O event와 같이 CPU를 받아도 당장 명령을 수행할 수 없어 event의 종료를 기다리는 상태
프로세스의 상태 변화
- Ready -> Running : CPU scheduler에 의해 dispatch 된 경우
- Running -> Waiting : I/O or event가 발생한 경우
- Running -> Ready : interrupt가 발생한 경우
- Waiting -> Ready : I/O or event 가 종료된 경우
Context Switch
Context Switch란 CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정을 의미합니다.
현재 CPU에서 실행 중인 프로세스가 명령을 모두 마치고 종료되는 경우에는 문제가 없습니다. 하지만, 실행 중에 CPU의 사용 권한을 빼앗긴 경우 현재 실행중인 CPU의 상태를 저장하고 불러와야 하는데 이를 Context Switch라고 합니다.
여기서 프로세스의 Context란 PC(Program Counter)와 Register 값들을 의미합니다.
다음은 Context Switch의 과정입니다.
- CPU를 내어주는 프로세스의 Context를 PCB에 저장한다.
- CPU를 얻는 프로세스의 Context를 PCB에서 읽어온다.
Process 간 소통 방법
원칙적으로 한 프로세스에서 다른 프로세스에 접근하는 것은 금지되어 있습니다. 하지만, 다른 프로세스의 정보가 필요한 상황일 경우 어떻게 이 문제를 해결할 수 있을까요?
(1) Shared Memory
Shared Memory란 공유하고자 하는 프로세스들이 공유된 메모리 공간을 만드는 것을 의미합니다.
장점
Shared Memory 생성 시에는 System call이 필요하지만, 한번 만들고 나서 접근 할 때에는 System call이 필요없기 때문에 빠르다는 장점이 있습니다.
단점
Multicore processor 환경에서
- 두 개 이상의 프로세스가 동시에 shared memory에 있는 데이터를 수정할 경우 Race Condition이 발생할 수 있다. -> Synchronization을 통해 해결한다.
- 동일한 shared memory를 참조하지만 각 코어의 캐시에는 다른 값이 저장되는 cache coherence(캐시 일관성) 문제가 발생할 수 있다.
* Race Condition : 공유 자원에 대해 동시에 접근할 때 결과의 일관성이 보장되지 않는 상태를 의미한다.
질문
cache coherence 문제를 어떻게 해결할 수 있을까?
(2) Message passing
Massage passing이란 communication link를 통해 양 프로세스 간 메세지를 주고 받음으로써 데이터를 공유하는 방법이다.
장점
Shared Memory에서 발생한 문제점이 나타나지 않는다.
단점
사용자 프로그램의 권한 외의 작업이므로 System call을 사용해야 하기 때문에 느리다.
질문
communication link를 어떻게 구현할 수 있을까?
'프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] Multiprocessor Scheduling (0) | 2024.07.23 |
---|---|
[운영체제] CPU Scheduling (1) | 2024.07.20 |
[운영체제] 쓰레드 (Thread) (0) | 2024.07.20 |
[운영체제] OS란 무엇인가 (0) | 2024.07.14 |