728x90
반응형
Program vs Process
Program : 기계어 instructions + 디스크의 static data의 집합
- 컴파일된 exe파일
- 기계어 instruction : cpu가 이해하는 언어
- static data : 컴파일 될 때 해당 메모리 영역이 유지되며, 변경된 값이 유지되고, 어디서든 접근 가능 ex) global, static
exe파일이 여러번 실행 >> process 여러개 생성
Process : 실행되고 있는 프로그램
- 메모리 : instructions (메모리에 적재 - code) & data (프로그램 실행에 따라 변경됨)
- 레지스터 : program counter (cpu가 실행해야하는 인스트럭션 위치를 가리키는 레지스터 ) & stack pointer 등
- 오픈한 파일의 list와 상태정보 등
Virtualization of the CPU
Q. How can we provide the illusion? 어떻게 cpu가 여러개의 프로그램을 실행하는 것처럼 환상을 제공하는가?
A. time sharing을 통해 제공
Time sharing
(cpu virtualization을 위한 방법)
- CPU가 몇개 있는지와 관계 없이 process를 실행시킬 수 있다. → illusion 제공 (가진 cpu < 프로세스 인 경우에도)
- Potential cost : 모든 프로세스의 성능이 유지될 수 있을 것인가?
- context switch & scheduling policy에 따라 구현됨
context switch - overhead가 존재함
scheduling policy - 운영체제 정책에 따라 cpu 스케줄링이 어떻게 일어날 것인지 결정됨
Process State
- Running : cpu 자원을 할당받아 프로세스가 실행되고 있는 상태 - 한 개의 process만 run 상태일 수 있음
- Ready : 기다리는 상태 - queue로 이루어져있어, 여러개의 process가 ready 상태일 수 있음
- Blocked (Waiting) : cpu를 할당받아도 아무것도 안하는 상태 (데이터의 입력을 기다리는 등) / 프로세스가 cpu를 할당받아도 작동할 준비가 되어있지 않음
ex) wait sytem call : 어느 프로세스가 끝날지 기다려야하므로 cpu를 할당받아도 아무것도 하지 않음
Scheduling Queues
OS 는 세가지 종류의 queue를 다룸
- Run queue
- Ready queue - 다음에 실행할 프로세스를 효과적으로 찾아야함
- Watiting queue
CPU : 상태마다 queue를 만들어서 프로세스를 해당하는 상태의 queue에 넣어둠
Linux 의 경우 red-black tree로 queue를 만들어놓음
Example of Process State
Time | \(P_0\) | \(P_1\) | Notes | queue 상태 |
1 | Running | Ready | run - \(P_0\) ready - \(P_1\) |
|
2 | Running | Ready | \(P_0\)의 I/O 요청이 발생함 | |
3 | blocked | running | run - \(P_1\) wating - \(P_0\) |
|
4 | blocked | running | \(P_0\)의 I/O 요청이 끝남 | |
5 | ready | running | 운영체제 정책 - \(P_0\), \(P_1\) 모두 cpu를 할당 가능 | run - \(P_1\) ready - \(P_0\) |
6 | ready | running | \(P_1\) 종료 | |
7 | running | run - \(P_0\) | ||
8 | running |
* \(P_0\)의 I/O가 종료될 때 : I/O디바이스가 생성하는 인터럽트에 의해 인터럽트 핸들러가 실행 >> block → ready
* 인터럽트가 발생하면 cpu 스케줄러가 어디에 cpu를 줄 지 결정함 - 이 경우에는 그대로 \(P_1\)에게 준 것
cpu 점유
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
PCB (Process Control Blocks)
프로세스 생성 >> 프로세스를 관리하기 위한 자료구조 PCB를 생성함
kernel/include /linux/sched.h
struct task_struct { //PCB의 역할을 함
volatile long state;
/* TASK_RUNNING : running인지 여부 확인
TASK_INTERRUPTIBLE .. : blocked의 종류가 다양함 - state가 많음*/
void *stack; // 커널 스택을 가리키는 stack pointer
unsigned int cpu; // 몇번 cpu를 사용하는지 - 몇번 코어인지
struct mm_strcut *mm; // memory vartualization 정보 - 구조체의 시작점
// 프로세스간의 관계 정보 (fork)
struct task_strcut *parent; // parent process
struct list_head children; // circulary doubled linked list로 관리함 - child 여러개
struct files_struct *files; //open한 파일들의 정보
}
- 각각의 프로세스는 user-mode stack & kernel-mode stack을 가지고 있음
728x90
반응형
'CS > OS' 카테고리의 다른 글
CPU Scheduling (1) | 2024.08.12 |
---|---|
Limited Direct Execution (0) | 2024.04.28 |
Data Structures (Process Control Blocks) (0) | 2024.03.10 |
Disk Scheduling (디스크 스케줄링) (0) | 2024.02.05 |