호야의 블로그
간단한 정리
프로세스의 개념과 상태
프로세스는 OS를 이해하기 위해 알아야 할 개념입니다.
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말합니다. 능동적이며 일의 기본 단위(unit of working)를 말합니다. 프로그램과의 차이는 프로그램은 수동적이며 메모리에 미리 올라가있지 않다는 것입니다. 또한 프로세스는 생명과 같이 '탄생-활동-죽음'과 같은 상태 변화를 합니다.
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰이죠. 또한, 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 합니다.
<프로세스의 상태>
다중 프로그래밍 시스템에서 프로그램의 수행에 따라 바뀌게 되는 프로세스의 상태로서 실행 프로세스는 현재 중앙 처리 장치(CPU)에서 실행 중인 상태이고, 대기 프로세스는 순서 적으로 처리해야 하는 입출력 처리 장치의 작업이 끝나기를 기다리는 프로세스이며, 준비 프로세스는 CPU만 할당받으면 실행이 가능한 상태의 프로세스입니다.
new -> ready <-> run -> terminate
new queue: 디스크에 위치하는 상태이며, CPU에 프로세스를 올리기 전 상태로 프로세스의 탄생이다.
ready Q: new에서 넘어온 프로세스를 대기하는 상태이다. 대기 중인 상태에서 I/O이벤트가 끝나면 다시 레디 상태가 된다.
run Q: 레디 큐에서 CPU로 가져와서(dispatcher) 동작하고, 잠시 끊어서(time-out; 일시정지) 레디 큐로 갈 수 있다.
waiting Q: I/O 이벤트가 멈추거나 방해가 일어날 때 대기하는 상태이다.
terminate Q: running 중인 프로세스가 CPU에서 내려온 상태. 프로세스의 죽음이다.
time-out과 dispatching은 강제 집행됩니다.(프로세스가 CPU의 명령을 받음;preemptive)
I/O 이벤트와 종료는 비강제적입니다.(이미 이전에 인터럽트가 발생하기 때문에;non-preemptive)
이러한 과정은 메모리(가상 메모리) 사이에서 지속적인 SWAPPING이 일어나며 mid-term 스케줄러에 해당합니다.
PCB(Process Control Block)
PCB란 절연판 위와 그 내부에 회로를 형성시켜 그 위에 실장된 부품을 전기적으로 연결해 전기적으로 동작을 시켜주는 기판을 말합니다. PCB는 위에서 말한 바와 같이 부품의 전기적 연결 기능 외에 부품들을 기계적으로 고정해주는 역할도 합니다. 따라서 기계적 강도를 높여야 하기에 산업용 PCB의 원자재 속에는 보강재인 유리섬유(Glass Fiber)가 약 50% 들어 있습니다. 또한 PCB는 다음과 같은 정보들을 갖고 있습니다.
-프로세스 상태
-CPU 레지스터
-메모리 관리 정보
-프로그램 카운터
-CPU 스케줄링 정보
-액세스 정보
-I/O 상태 정보
CPU 스케줄링
프로세스들의 수행 순서를 정해주는 것이 CPU 스케줄링 인데 단기 중기 장기 스케줄링으로 나뉘어있습니다. 그중에서 단기 스케줄링은 준비 상태 프로세스 중에 한 프로세스를 선택하여 CPU 할당하는 것입니다. 또한 스케줄러는 다음과 같은 상황에서 활성화(involking)됩니다.
1.레디 큐에 2개 이상의 프로세스가 존재할 때
2.프로세스 상태가 변할 때
3.이벤트가 발생할 때
4.PCB에 접근량이 증가할 때
5.run상태가 될 때(dispatching)
6.run에서 ready 상태가 될 때(time-out)
7.프로세스가 종료될 때(terminated)
8.I/O가 발생할 때(waiting)
(5~8까지는 run state에서 스케줄러가 동작)
스케줄러의 종류는 아래 3가지와 같고, short-term 스케줄러(CPU 스케줄링)에 대한 자세한 설명은 따로 포스팅 하겠습니다. 여기선 알고만 계시고 넘어가면 좋을 것 같습니다.
long-term 스케줄러: new->ready 사이
midium-term 스케줄러: swap에 관여
short-term 스케줄러: CPU 스케줄링, ready -> run (CPU에서 동작해서 속도가 제일 빠르다)
컨텍스트 스위칭(Context Switching)
CPU는 동시에 한 개씩 CPU는 각각의 스레드를 시분할 하여 각각의 스레드를 번갈아가며 실행하게 되는데, 이때 이전 스레드의 문맥 정보 (레지스터값, 실행 중인 스택 정보 등)을 백업받고 백업받아놓았던 다음 스레드의 문맥정보를 로딩하는 과정을 거치게 됩니다. 이 과정을 컨텍스트 스위칭이라고 합니다.
과정을 설명하자면 예시로 dispatching과정은 PCB에서 CPU로 정보를 로드합니다. I/O 이벤트 발생 시와 time-out과정은 정보를 writing하여 PCB로 내보냅니다. 이러한 문맥 변환 과정을 컨텍스트 스위칭이라고 합니다. 일상의 예시로는 친구와 A 얘기 중 전화를 받고 친구와의 대화 내용 A가 메모리(뇌)에 잠시 저장되고 전화 내용 B를 수행한 후 나중에 다시 얘기를 이어갈 수 있는 것 A와 같은 것입니다.
후기 및 정리
아주 간단한 개념 설명이었습니다. 다음 글에선 CPU 스케줄링에 대한 설명과 이후 C로 구현한 코드를 올려드리겠습니다.
OS 4번째 글: 2018/10/26 - [IT/OS] - [OS] 운영체제 1차 정리
OS 3번째 글: 2018/10/24 - [IT/OS] - [OS] CPU 스케줄러
OS 2번째 글: 2018/10/24 - [IT/OS] - [OS] 진짜 간단히 정리한 프로세스 개념
OS 1번째 글: 2018/10/18 - [IT/OS] - [OS] 운영체제에 대해서
조금의 도움이 되셨다면 로그인 없이도 가능한
왼쪽 아래 ♥공감 버튼을 꾹 눌러주세요!
'IT > OS' 카테고리의 다른 글
운영체제 3차 정리 - Memory Management (1) (0) | 2018.10.26 |
---|---|
운영체제 2차 정리 - 데드락(Deadlock) (0) | 2018.10.26 |
운영체제 1차 정리 - 스케줄링 (1) | 2018.10.26 |
운영체제 CPU 스케줄러 (0) | 2018.10.24 |
운영체제에 대해서 (0) | 2018.10.18 |