✔ 개념
디스크에 있는 것은 프로그램, 프로그램을 실행하기 위해 메모리에 로드된 것은 프로세스라고 한다.
프로세스는 Stack, Heap, Data, Code로 나뉜다.
- Stack
- 주로 함수(function parameters, return address, local variables)와 같은 임시 데이터 저장소이다.
- heap
- 프로그램이 실행되면서 동적 할당되는 메모리 공간이다.
- data
- 전역 변수가 저장된다.
- text
- 실행되는 코드가 저장된다.
✔ Process State
프로세스의 상태는 현재 활동에 따라 달라진다.
- new
- 프로세스가 새로 생성된 상태
- Running
- 명령어가 들어가는 상태
- Waiting
- 프로세스가 event를 기다리는 상태 (ex. I/O devices)
- Ready
- 프로세스가 프로세서에게 할당되기를 기다리는 상태
- Terminated
- 프로세스가 실행을 마친 상태
✔ Process Control Block (PCB)
각 프로세스들은 OS에서 Process Control Block (PCB) 형태로 표현되며 관리된다.
각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 제거된다.
프로세스는 CPU를 점유하여 작업을 처리하다가 상태가 전이되면 진행하던 작업 내용들을 모두 정리하고 CPU를 반환해야 하는데, 이 때 진행하던 작업들을 모두 저장해야 한다.
이 내용들을 PCB에 저장하고, 다시 CPU를 점유하여 작업을 수행해야할 때 PCB로부터 해당 정보들을 CPU에 넘겨옴으로써 하던 작업을 진행할 수 있게 된다.
PCB에는 프로세스 상태와 프로그램 카운터, 메모리 한계, 레지스터 정보 등이 담겨있다.
- Process state
- 프로세스의 상태
- Program counter
- 다음에 실행해야 할 명령의 주소를 가리키는 카운터
- CPU registers
- 프로세스가 인터럽트 이후 올바르게 작업을 이어가기 위해 참조하는 CPU 레지스터 값
- 여러 레지스터와 상태 코드 정보를 포함하는데, 이들은 나중에 프로세스가 다시 스케줄될 때 계속 올바르게 실행되도록 하기 위해 인터럽트 발생 시 저장되어야 한다.
- 인터럽트
더보기주변 장치와 입출력 장치는 CPU나 메모리와 달리 interrupt라는 메커니즘을 통해 관리된다.
입출력 연산은 CPU의 명령수행 속도보다 아주아주 현저하게 느리다.그래서 CPU는 입출력을 기다리면서 다른 일을 하고있고, 입출력 연산이 완료되면 interrupt라는걸 발생시켜 CPU에게 해당 일을 하라고 알려준다.
그럼 CPU는 하고 있던 일을 프로세스의 PCB에 저장하고 그 일을 수행한다.주변 장치와 입출력 장치는 CPU나 메모리와 달리 interrupt라는 메커니즘을 통해 관리된다.
- 프로세스가 인터럽트 이후 올바르게 작업을 이어가기 위해 참조하는 CPU 레지스터 값
- CPU-scheduling information
- 프로세스 우선순위, 스케줄링 큐 포인터 등의 정보를 포함함
- Memory management information
- 기준(base) 레지스터, 한계(limit) 레지스터, 페이지 테이블 같은 정보를 포함한다.
- 운영체제 메모리 구조에 따라 다르다.
- Accounting information
- CPU의 실시간 사용량, 시간 제한, 프로세스 개수 등을 담고 있는 정보
- I/O status information
- 프로세스에 할당된 I/O 장치들의 정보들을 포함하고 있다.
✔ 프로세스 스케줄링 (Process Scheduling)
프로세스 스케줄러는 CPU에서의 프로그램을 실행하기 위해 사용 가능한 프로세스를 선택하고 어떤 프로세스를 할당할 것인지 결정한다.
다중 프로그래밍의 목적은 CPU의 이용을 최대화하기 위해 항상 어떤 프로세스가 실행되도록 하는 데 있다.
Time sharing은 각 프로그램이 실행되는 동안 사용자가 상호작용할 수 있도록 프로세스들 사이에서 CPU 코어를 빈번하게 교체하는 것이다.
→ 사용자는 각 프로그램이 동시에 돌고 있는 것처럼 볼 수 있다.
단일 CPU 코어에서 1개의 프로세스만 돌아갈 수 있지만 multi-core 시스템에서는 여러개의 프로세스가 실행될 수 있다. 코어의 수 보다 프로세스의 수가 많으면 여분의 프로세스들은 코어가 빌 때까지 기다리고, reschedule된다.
Scheduling Queues
프로세서가 시스템에 등록되면 준비 큐(ready queue)에 올라가고, CPU core에서 실행될 때까지 기다린다.
- 이 큐는 Linked List로 구현되어 있다.
- 헤더는 첫 PCB를 가리키며 각 PCB마다 다음 실행될 PCB를 가리킨다.
- Ready Queue
- 대기열에서 CPU 할당을 받기 위해 프로세스가 대기하는 공간
- Wait Queue
- I/O, event가 발생한 동안 대기하는 공간
- Queue Diagram
- ready queue에 있던 프로세스가 CPU를 할당받아 작업을 수행하다가 I/O request, interrupt, for a child 등의 이벤트가 발생하면 다시 대기 상태로 변경된다.
- 시분할 받은 시간이 만료된 경우에도 대기 상태로 변경된다.
Context Switch
프로세스가 실행되다가 interrupt가 발생해 운영체제가 개입하여 프로세서에 할당된 프로세스를 바꾸는 것을 말한다.
프로세서가 다른 프로세스로 switch할 때 시스템은 작업중이던 프로세스의 상태(Context)를 저장하고 새로운 프로세스의 상태를 로드한다.
프로세서는 프로세스의 PCB의 정보를 바꿔야하는데 이걸 Context Switch라고 한다.
이 시간 동안은 의미있는 작업을 못하므로 오버헤드라서 너무 자주 일어나면 성능이 저하된다.
✔ Operations on Processes
대부분의 시스템에서 프로세스는 동시에 실행될 수 있고 동적으로 생성/삭제될 수 있다.
시스템은 프로세스 생성, 삭제 매커니즘을 제공해야 한다.
Process Creation
프로세스는 프로세스를 만들 수 있다.
즉, 부모 프로세스가 자식 프로세스를 만들 수 있다. (트리구조)
- PCB에 저장된 pid값으로 프로세스를 식별한다.
- 운영체제가 정해준 고유 번호
- 프로세스를 만드는 프로세스: parent process
- fork() 명령어로 생성 가능
- 부모 프로세스에 의해 만들어진 프로세스: child process
- exec()를 통해 내용을 변경한다.
프로세스 실행 2가지
- 부모와 자식 프로세스가 동시에 실행되는 것처럼 동작
- 자식 프로세스가 종료되기를 부모가 기다림
주소공간 관리 방식 2가지
- 동일한 작업을 하는 프로세스라면 별도의 공간을 만들지 않고 PCB만 추가함
- 아니라면 새로운 주소공간을 가짐
Process Termination
exit()를 호출하면 프로세스를 종료시킬 수 있다.
프로세스의 리소스들은 다시 OS에 반납된다.
- 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식은 그 상위 부모를 바라본다.
- 자식 프로세스가 종료되었는데 부모 프로세스가 자식 프로세스가 반환한 정보를 회수하지 않으면 자식은 종료되었지만 정보가 메모리에 남아 있는 좀비 프로세스가 된다.
- 부모 프로세스가 없는 자식 프로세스를 고아 프로세스라고 한다.
✔ Interprocess Communication (IPC)
프로세스는 독립적으로 동작하거나 서로 협력하며 동작할 수 있다.
- 프로세스가 독립적
- 다른 프로세스들과 데이터를 공유하지 않는다.
- 프로세스가 협력적
- 하나의 프로세스가 다른 프로세스들과 데이터를 주고 받을 수 있다.
- 협력적인 프로세스들은 서로 영향을 준다.
- 정보 공유, 속도 향상, 모듈화의 목적을 가진다.
프로세스가 협력적이기 위해서는 IPC를 필요로 한다. 즉, 프로세스간 데이터를 주고받을 수 있어야 한다.
IPC 모델에는 메시지 패싱(message passing)과 공유 메모리(Shared memory)가 있다.
Shared Memory
shared memory 방식에서는 프로세스간 공유할 메모리 공간을 만들어 거기서 communication이 일어난다.
프로세스들은 이 공간에 데이터를 읽고 쓴다.
- 공유 공간을 만들 때에만 system call이 일어나므로 빠르다.
- 동기화에 대한 문제가 있다.
- A가 쓰고 B가 읽는 상황일 때 B가 A보다 일찍 읽게되면 방금 쓴건지 모름 → 추가적인 기법 필요
Message Passing
커널(OS)이 메시지를 전달해주는 방식이다.
따라서 안전하고 OS가 동기화를 해주므로 동기화 문제가 없다.
- 프로세스 충돌이 없으므로 적은 양의 데이터를 교환할 때 효율적
- 구현하기 쉬움
- 대신 system call에 의해 실행되어 시간이 더 걸린다.
- send(message), receive(meaage)
- 적은 양의 데이터를 전달하는 경우에만 사용
message passing 2가지 방식
- direct communication
- 커널이 메시지를 직접 전달
- indirect communication
- 커널이 특정 공간에 메시지를 두고 읽어가는 방식
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 교착상태 (Deadlock, 데드락) (0) | 2023.03.26 |
---|---|
[운영체제] Thread란? (0) | 2023.03.05 |
[OS] 운영체제(Operating System)의 개념과 구조 (1) | 2023.02.05 |