프로세스
1. 프로세스의 개념
- 프로세스의 문맥 : 프로세스의 현재 상태를 나타내는데 필요한 모든 요소
- CPU 수행 상태를 나타내는 하드웨어 문맥 - Program Counter, 각종 register
- 프로세스의 주소 공간 : code, data,stack
- 프로세스 관련 커널 자료 구조 : PCB(Process Control Block), Kernel stack
- 프로세스가 번갈아가며 실행되기 때문에 다음번 CPU를 점유했을 때 작업을 이어서 실행하기 위해서는 프로세스 문맥이 필요하다
프로세스의 상태
프로세스는 상태가 변경되며 수행된다.
- Running : CPU를 잡고 instruction을 수행중인 상태
- Ready : 메모리 등 다른 조건을 만족하고 CPU를 기다리는 상태
- Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리를 상태 ex) 디스크에서 file을 읽어와야 하는 경우
- New : 프로세스가 생성중인 상태
- Terminated : 수행이 끝난 상태
하나의 프로세스만 CPU에서 수행됨. timer interrupt가 들어오면 다음 프로세스가 CPU 점유.
Queue!!
Process Control Block(PCB)
운영체제가 각 프로세스를 관리하기 위해 프로세스
당 유지하는 정보.
1) OS가 관리상 사용하는 정보
- Process state, Process ID
- schekduling information, priority
2) CPU 수행 관련 하드웨어 값
- Program counter, registers
3) 메모리 관련
- code, stack, data의 위치정보
4) 파일 관련
- open file descriptors
문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 PCB를 읽어옴
- system call이나 interrupt 발생시 반드시 context switch가 일어나는 것은 아니다
사용자 프로세스 간에 CPU가 넘어갈 때 context switch가 일어남.
system call이나 interrupt가 발생하면 운영체제로 CPU로 넘어감 → 이건 context switch가 아님!
2. 프로세스 스케줄링
프로세스를 스케줄링하기 위한 큐
프로세스들은 각 큐들을 오가며 수행된다.
- Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queues : I/O device의 처리를 기다리는 프로세스의 집합
스케줄러
- CPU scheduler=Short-term scheduler : 프로세스에
CPU
를 주는 문제, 어떤 프로세스를 다음번에 running 시킬지 결정,충분히 빨라야함 - Job scheduler = Long-term scheduler : 프로세스에
메모리
를 주는 문제, 프로세스시작(new)→ 메모리에 올라가면 ready 상태가 됨, 시작 프로세스 중 어떤 것들을 ready queue(메모리)로 보낼지 결정, degree of Multiprogramming(메모리에 올라가는 프로세스 수)을 제어. time sharing system에는 보통 장기 스케줄러가 없고 무조건 ready 상태임. - Swapper = Medium-term Scheduler : 요즘 시스템은 프로그램이 시작되자마자 메모리를 줌. 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄, 프로세스에게서 memory를 뺏는 문제, degree of Multiprogramming을 제어 → 프로세스를 Suspended 상태로 만듦!!!
3. Thread 쓰레드
프로세스 내부의 CPU 수행단위. 프로세스하나에서 공유할 수 있는 건 최대한 공유(PCB, 메모리의 data,code), 별로도
- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
- 스레드를 사용하면 병렬성을 높일 수 있다.
Thread의 구성
- program counter
- register set
- stackspace
Thread가 동료 thread와 공유하는 부분(=task)
- code section
- data section
- OS resources
스레드의 장점
- 응답성 : 스레드를 여러개 가지고 있으면 하나의 스레드가 blocked 상태일 때 (예 - 네트워크 통신) 다른 스레드가 동작한다(예 - 화면 보여주기)
- 자원 공유 : 같은 일을 하는 프로그램이 여러 개 있을 때 여러 프로세스를 쓰는 것보다는 하나의 프로세스를 만들고 CPU 수행단위를 여러개를 만들어 code, data, 프로세스 resource를 공유하면 자원을 더 효율적으로 사용할 수 있다.
- 경제성 : 스레드의 create & CPU swithing이 프로세스의 그것보다 오버헤드가 적음
프로세스를 하나 만드는 것이 프로세스 내부에서 스레드를 만드는 것 보다 오버헤드가 더 큼, 문맥교환(프로세스 간 cpu 점유 이동) 프로세스 내부에서 스레드 내 CPU swithing이 context switch보다 오버헤드가 작음
스레드 구현 방법
- Kernerl Thread : kernel 방식 - 스레드가 여러개 있다는 사실을 운영체제 커널이 알고 있다. 스레드를 넘길 때 커널이 관여한다
- User Thread : library 방식 - 운영체제는 스레드가 여러개라는 걸 모르고, 사용자 프로그램이 자체적으로 스레드를 관리함.
4. 프로세스 관리
프로세스 생성
- 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성 - 복제
- Copy on Write(COW) : 효율적인 운영ㅊ제에서는 PCB 정도만 복제하고, 우선 자원을 공유한다. 내용이 바뀔 때만 복제를 함.
- 프로세스의
트리(계층 구조)
형성 - 프로세스가 실행되려면 자원(cpu, memory,..)이 필요하다
- 운영 체제로부터 받는다
- 부모와 공유한다
- 주소 공간(Address space)
- 자식은 부모의 공간을 복사함(binarhy and OS data - PCB,자원,..) - ex) unix
fork()
- 자식은 그 공간에 새로운 프로그램을 올림 ex]
exec()
시스템 콜을 통해 새로운 프로그램을 메모리에 올림
- 자식은 부모의 공간을 복사함(binarhy and OS data - PCB,자원,..) - ex) unix
프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 ex] exit() system call - 자발적
- 자식이 부모에게 output data를 보냄 ex]
wait()
- 프로세스의 각종 자원들이 운영체제에게 반납됨
- 자식이 부모에게 output data를 보냄 ex]
- 강제 종료 : 부모 프로세스가 자식의 수행을 종료시킴 ex]
abort()
- 자식이 할당 자원의 한계치를 넘어섬
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 부모가 exit 하는 경우
- 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수햏ㅇ되도록 두지 않는다
- 단계적인 종료
프로세스 관련 시스템 콜 정리
- fork() : 프로세스 복제
- exec() : 새로운 프로그램으로 덮어씌움.
- wait() :
- exit() : 자발적 프로세스 종료
프로세스 간 협력 - IPC(Interprocess Communication)
독립적 프로세스 : 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
협력 프로세스 : 프로세스 협력 메커니즘을 톨ㅇ해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘 (
IPC
: Interprocess Communication)message passing
: 메시지를 전달하는 방법, 커널을 통해, 프로세스 사이에 공유 변수를 사용하지 않고 통신하는 시스템- Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시
- Indirect Communication : mailbox(또는 port)를 통해 메시지를 간접 전달
shared memory
: 주소 공간을 공유하는 방법. 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있다.
스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 프로세스를 구성하는 스레드들간에는 주소 공간을 공유하므로 협력이 가능
'CS > 운영체제' 카테고리의 다른 글
컴퓨터 시스템의 구조 (0) | 2022.03.15 |
---|---|
컴퓨터 내부의 언어체계 (0) | 2022.01.18 |