-
[OS] 운영체제 프로세스, 스케줄러Computer Science/OS 2022. 12. 29. 19:02
http://www.kocw.net/home/cview.do?lid=b31830a2b3cf1e60
운영체제
운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각
www.kocw.net
Process 1
프로세스의 개념, 프로세스의 상태(Process State), 프로세스의 개념, 프로세스 상태도, Process Control Block(PCB), 문맥교환(Context Switch), 프로세스를 스케줄링하기 위한 큐, Ready Queue와 다양한 Device Queue, 스케줄러(Scheduler)
프로세스
- 실행 중인 프로그램
- 프로세스의 문맥
- 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미
- CPU 수행 상태를 나타내는 하드웨어 문맥
- 프로세스의 주소 공간
- 프로세스 관련 커널 자료구조
- PCB
- kernel stack
📝 프로세스와 쓰레드의 차이
프로세스
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
- 특징
운영체제로부터 독립된 메모리 영역을 할당받는다. ( 다른 프로세스의 자원에 접근할 수 X)
프로세스들은 독립적이기 때문에 통신을 위해 IPC를 사용해야한다.
*IPC(Inter Process Communication):프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법
프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.
쓰레드
- 프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위
- 특징
쓰레드는 프로세스 내에서 stack만 따로 할당 받고, code, data, heap 영역은 공유한다.
쓰레드는 프로세스 자원을 공유하기 때문에 다른 쓰레드에 의한 결과를 즉시 확인할 수 있다.
프로세스 내에 존재하며, 프로세스가 할당받은 자원을 이용하여 실행된다.프로세스의 상태
프로세스는 상태가 변경되며 수행된다
- Running
- CPU를 잡고 instruction을 수행 중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- 예시) 디스크에서 file을 읽어와야 하는 경우
프로세스 상태도
Process Control Bolck (PCB)- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 구성요소 (구조체로 유지)
- OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority
- CPU 수행 관련 하드웨어 값
- Program counter, registers
- 메모리 관련
- code, data, stack 의 위치정보
- 파일 관련
- Open file descriptors
- OS가 관리상 사용하는 정보
문맥교환 (context switch) ⭐️
CPU는 굉장히 빠른 자원이기 때문에, 빠른 간격으로 얻었다가 뺏기는 과정을 반복합니다.
→ 뻇기는 시점을 기억해두었다가 그 시점부터 시작할 수 있도록
기존의 프로세스의 상태 또는 레지스터 값을 저장하고 또 다른 프로세스를 실행할 수 있도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 과정을 의미
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
** 헷갈리기 쉬운 점
- System call이나 interrupt 발생 시, 반드시 context switch가 일어나는 것은 아님 !
System call : 본인이 필요해서 운영체제에게 요청을 할 때
interrupt: 컨트롤러같은 장치가 CPU에 정보를 전달할 목적으로 interrupt를 거는 것- 예시1) 사용자 프로세스로부터 운영체제(커널 모드)로 넘어 간 것 → 컨텍스트 스위치 X
- 예시2) 사용자 프로세스 A 에서 timer interrupt or I/O 요청 system call(오래걸리는 작업) 을 함 → 문맥교환 일어남(다른 프로세스를 실행시키기 위해) → 사용자 프로세스 B 실행 → 컨텍스트 스위치 일어남
예시1 의 경우 CPU 수행 정보 등 context의 일부를 PCB에 save 해야 하지만, 문맥교환을 하는 예시2 의 경우 그 부담이 훨씬 크다 (e.g cache memory flush)
📝 Context Switching이란?
- 인터럽트를 발생시켜 CPU에서 실행중인 프로세스를 중단하고, 다른 프로세스를 처리하기 위한 과정입니다.
- 현재 실행중인 프로세스의 상태를 먼저 저장하고, 다음 프로세스를 동작시켜 작업을 처리한 후에 이전에 저장된 프로세스의 상태를 다시 복구합니다.
- 인터럽트란, CPU가 프로세스를 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요함을 CPU에게 알리는 것을 말합니다.
프로세스를 스케줄링 하기 위한 큐
- Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queues
- I/O device의 처리를 기다리는 프로세스의 집합
→ 프로세스들은 각 큐들을 오가며 수행된다
스케줄러(Scheduler)
어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드
- Long-term scheduler(장기 스케줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 memory(및 각종 자원)을 주는 문제 → 어떤 프로세스가 new상태에 있는 데 메모리를 줄지 안줄지를 결정
- degree of Multiprogramming을 제어
* degree of multiprogramming: 메모리에 올라가 있는 프로세스의 수 - time sharing system에서는 보통 장기 스케줄러가 없음 (무조건 ready)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- Short-term scheduler(단기 스케줄러 or scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야함 (millesecond 단위)
- 어떤 프로세스를 다음번에 running 시킬지 결정
- Medium-Term Scheduler(중기 스케줄러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of multiprogramming 을 제어
- 여유 공간 마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫓아냄
multiprogramming: 메모리에 여러프로그램이 동시에 올라가는 것
보통 시스템에선 곧바로 메모리로 올려놓기 때문에 long-term scheduler는 없다.중기 스케줄러를 이용하여 조절하고 있다.
프로세스의 상태
중기 스케줄러의 등장으로 인해 프로세스의 상태에 실행, 준비, 봉쇄 외의 상태가 더 추가 된다.
- Running
- CPU를 잡고 instruction을 수행 중인 상태
- CPU를 잡고 instruction을 수행 중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- 예시) 디스크에서 file을 읽어와야 하는 경우
- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통쨰로 swap out된다.
→ 프로세스 당 보유 메모리양이 지나치게 적어진 경우 이를 완화하기 위해 일부 프로세스를 메모리에서 디스크로 스왑 아웃시킴
- 예시) 사용자가 프로그램을 일시 정지 시킨 경우 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올아와 있을 때)
Block: 자신이 요청한 event가 만족되면 Ready
Suspended: 외부에서 resume 해주어야 Active
'Computer Science > OS' 카테고리의 다른 글
[OS] 프로세스의 생성과 프로세스 간의 협력 (0) 2023.01.12 [OS] 쓰레드와 멀티쓰레드 (0) 2023.01.05 [OS] 시스템 구조와 프로그램 실행 (0) 2022.12.29 [OS] 컴퓨터 시스템 구조 (0) 2022.12.27 [OS] 운영체제 정의, 기능, 분류, 구조 (0) 2022.12.27