PCB
Process Control Block
프로세스에 대한 정보를 담고있는 블럭으로 메모리 상에 위치한다.
각 프로세스마다 PCB가 존재하면 다음과 같은 정보를 포함하고 있다.
- 프로세스 상태
- 프로그램 카운터
- CPU 레지스터들
- CPU 스케줄링 정보
- 메모리 관리 정보
- 회계 정보
- 입출력 상태 정보
Context Switch
CPU 코어에서 작업하는 프로세스(태스크)를 교환하는 작업을 말한다.
이 과정에서 원래 실행하고 있던 프로세스의 데이터(Context)를 저장하고, 새로 실행할 프로세스의 Context를 불러온다.
이 Context가 PCB에 포함되어있다.
Context Switching은 PCB를 저장하고 불러오는 과정이다.
CPU Scheduling
하나의 코어에서는 하나의 프로세스만 실행될 수 있다.
여러 개의 프로세스 중에 CPU 코어에서 실행될 하나의 프로세스를 선택하는 것이 스케줄링이다.
스케줄링 큐
프로세스가 시스템에 들어가면, 준비 큐로 들어간다.
준비 큐에서 실행되기를 기다린다.
준비 큐에 저장되는 것은 프로세스에 대한 PCB이다.
준비 큐의 헤더는 첫 번째 PCB를 가리키는 포인터가 있다. 각 PCB는 다음 PCB를 가리키는 포인터를 포함하고 있다.
준비 큐에서 대기하다가 CPU 코어에서 실행된 프로세스는 실행이 종료되거나 대기 큐에 들어간다.
대기 큐에 들어가는 경우는 다음과 같다.
- 입출력
- 자식 프로세스 생성
- 인터럽트
대기 큐에서 각 이벤트를 처리하고 준비 큐로 다시 들어가게 된다.
타임슬라이스가 만료된 프로세스는 바로 준비큐로 빠진다.
IPC
Interprocess Communication; 프로세스 간 통신을 말한다.
프로세스가 실행 중이 다른 프로세스들과 영향을 주고받는 다면 협력적인 프로세스라고 한다.
프로세스 협력의 장점은 다음과 같다.
- 정보 공유
- 계산 가속화
- 모듈성
자세한거는 생략
협력적인 프로세스들은 데이터를 교환할 수 있는 기법(IPC)이 필요하다.
공유 메모리(shared memory), 메세지 전달(message passing) 두 가지 기법이 있다.
속도는 공유메모리 방식이 더 빠르다.
메세지 전달은 시스템 콜을 사용하므로, 커널 간섭 등 추가적인 시간 소모가 생기지만, 공유 메모리 시스템은 공유 메모리 영역을 구축할 때만 시스템 콜이 필요하기 때문에 더 빠르다.
IPC in Shared Memory Systems
통신하는 프로세스들이 공유하는 메모리 공간을 만드는 것이다.
프로세스들은 공유공간에 읽고 씀으로써 정보를 교환할 수 있다.
데이터 형식과 위치는 프로세스들의 책임이다. 동일한 위치에 쓰지 않도록 운영체제가 관리해주는 것이 아니다. 프로세스들이 책임져야한다.
IPC in Message Passing Systems
운영체제가 메세지 전달 설비를 통해서 프로세스 간에 통신을 가능하게 해주는 방법이다.
메세지 전달 시스템은 최소 2가지의 연산이 필요하다.
`send(msg)`
`receive(msg)`
두 프로세스가 통신을 하려면, 서로 메세지를 보내고 받아야한다.
두 프로세스 간의 communication link가 있어야한다.
- 직접통신
- 대칭성
- 비대칭성
- 간접통신
- 메일박스
직접 통신 - 대칭성
서로의 프로세스를 가리키는 이름이 있음
`send(P, msg)` - 프로세스 P에 메세지 전송
`receive(Q, msg)` - 프로세스 Q로부터 메세지 수신
- 두 프로세스 쌍 사이에 연결
- 각 쌍 사이에는 하나의 연결만 존재
sender, receiver모두 상대방의 이름을 알아야 한다.
직접통신 - 비대칭성
`send(P, message)` - 프로세스 P에 메세지 전송
`receive(id, message)` - 임의의 프로세스로부터 메세지 수신 (id: 통신을 발생시킨 프로세스? 메세지를 받는 프로세스?)
직접통신은 프로세스 이름을 하드코딩한다는 단점이 있다.
간접통신 - 메일박스
메일박스라는 곳으로 메세지를 전송하고, 수신하는 방식이다.
메일박스는 메세지들이 들어가고 나오는 객체라고 볼 수 있다.
각 메일 박스마다 고유한 id값을 가진다.
`send(A, msg)` - 메일박스 A에 메세지 전송
`receive(A, msg)` - 메일박스 A로 부터 메세지 수신
여러개의 프로세스가 메일박스를 공유한다면, 한 프로세스가 보낸 메세지를 누가 수신하는 가는 수신 기법에 따라 다르다.
여러 프로세스가 모두 수신하는 것이 아니다.
시스템이 임의로 선택하거나, 라운드 로빈 방식 등 여러가지 알고리듬이 사용될 수 있다.
메일박스는 한 프로세스에게 소유되거나 운영체제에게 소유될 수 있다.
프로세스 소유 메일박스
프로세스에게 할당된 메모리 공간에 메일박스가 존재한다.
메일박스의 소유자(해당 프로세스)가 명확하므로 receiver와 sender를 명확히 구분할 수 있게 된다.
(메일박스의 소유자는 receiver 역할만)
운영체제 소유 메일박스
특정 프로세스에 속하지 않는다.
운영체제는 다음 기능을 제공해야한다.
- 새로운 메일박스를 생성
- 메일박스를 통해 메세지 send, receive
- 메일박스 삭제
메일박스를 생성한 프로세스가 메일박스의 소유자가 돼서 유일한 receiver가 된다.
'CS > 운영체제' 카테고리의 다른 글
파일, 파일 시스템이란? (0) | 2023.09.05 |
---|