반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 쿠버네티스
- AWS
- 네트워크
- 도커 이미지
- ios
- Swift
- 클라우드
- k8s
- docker
- kubernetes
- 컨테이너
- 운영체제
- 도커
- NGINX
- boj
- swift 클로저
- os
- 리눅스
- 부스트코스
- 프로세스
- centOS
- devops
- 도커 명령어
- 데브옵스
- 도커 컨테이너
- Python
- C++
- linux
- centOS7
- 인프라
Archives
- Today
- Total
귀염둥이의 메모
[OS] Process 본문
반응형
Process is a program in execution
프로세의 문맥(context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 Register
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료구조
- PCB(Process Control Block)
- Kernel stack
Time sharing, Multi Tasking을 위해 문맥을 파악한다. (현재 시점의 정확한 상태를 파악하기 위해 문맥을 살핀다!)
프로세스의 상태(Process State)
프로세스는 상태(state)가 변경되며 수행된다.
- Running : CPU를 잡고 instruction을 수행중인 상태
- Ready : CPU를 기다리는 상태 (메모리 등 다른 조건을 모두 만족하고)
- Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
- 자신이 요청한 event가 만족되면 Ready로 바뀜
- ex) 디스크에서 file을 읽어오는 경우
- Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다
- 외부에서 resume 하면 active
- ex) 시스템이 여러 이유로 프로세스를 잠시 중단 (메모리에 너무 많은 프로세스가 올라와 있을 때)
- New : 프로세스가 생성중인 상태
- Terminated : 수행(execution)이 끝난 상태
PCB(Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스 마다 유지하는 정보
다음의 구성요소를 가진다(구조체로 유지)
- (1) OS가 관리상 사용하는 정보
- Process state, Process ID
- Scheduling information, priority
- (2) CPU 수행 관련 하드웨어 값
- Program coutner, Registers
- (3) 메모리 관련
- Code, Data, Stack의 위치 정보
- (4) 파일 관련
- Open file descriptors...
문맥 교환(Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스A의 상태를 프로세스A의 PCB에 저장
- CPU를 새롭게 얻는 프로세스B의 상태를 프로세스B의 PCB에서 읽어옴
System call이나 interrupt 발생시 반드시 context switch가 일어나는 것은 아님!!
(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save 해야 하지만 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 크다
프로세스를 스케줄링하기 위한 큐
- Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queue : I/O device의 처리를 기다리는 프로세스의 집합
스케줄러(Scheduler)
- Long-term Scheduler (장기 스케줄러 or Job scheduler)
- 시작 프로세스 중 어떤 것들을 Ready queue로 보낼지 결정
- 프로세스에 memory 및 각종 자원을 주는 문제
- degree of Multiprogramming을 제어 -> memory에 올라가 있는 process의 수 제어
- Time sharing system에는 보통 장기 스케줄러가 없음 (현대의 운영체제는 장기 스케줄러가 없음)
- Short-term Scheduler (단기 스케줄러 or CPU scheduler)
- 어떤 프로세스를 다음번에 Running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함 (millisecond 단위)
- Medium-term Scheduler (중기 스케줄러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에서 memory를 빼앗는 문제
- degree of Multiprogramming을 제어
*Multiprogramming : 메모리에 여러 프로그램이 동시에 올라가는 경우
쓰레드(Thread)
A thread(or lightweight process) is a basic unit of CPU utilization
Thread의 구성
- program counter
- register set
- stack space
Thread 가 동료 thread와 공유하는 부분(=task)
- code section
- data section
- OS resources
CPU 수행과 관련된 정보는 각 쓰레드마다 별도로 가지게 된다.
Benefits of Threads
- Responsiveness
- Resource Sharing
- Economy
- Utilization of MP Architectures (CPU가 여러개 있을 때 얻을 수 있느 장점) *MP : Multi Programming
- 각각 쓰레드가 서로 다른 CPU에서 병렬적으로 처리할 수 있다
- 다중 쓰레드로 구성된 task 구조에서는 하나의 서버 쓰레드가 blocked(wating) 상태인 동안에도 동일한 task 내의 다른 쓰레가 running되어 빠른 처리를 할 수 있다
- 동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다
- 쓰레드를 사용하면 병렬성을 높일 수 있다
Implementation of Threads
- Kernel Threads : 쓰레드가 여러개가 있다는 사실을 운영체제가 알고있다.
- User Threads : 프로세스안에 쓰레드가 여러개 있다는 사실을 OS는 모르고 유저 프로그램이 library의 지원을 받아 관리
- Real-time Threads
반응형
'CS > 운영체제' 카테고리의 다른 글
[OS] Process Synchronization (0) | 2021.07.14 |
---|---|
[OS] CPU Scheduling (0) | 2021.07.11 |
[OS] Process Management (0) | 2021.07.09 |
[OS] System Structure & Program Execution (2) | 2021.06.28 |
[OS] Introduction to Operating Systems (0) | 2021.06.27 |
Comments