OS 2. Process

skh951225·2023년 2월 15일
0

KOCW 운영체제

목록 보기
2/10

출처 : KOCW 운영체제-반효경

Process

Process is a program in execution

프로세스의 context

process 가 cpu 제어권을 잃고 다시 얻게 되면 이전에 어디까지 process가 진행되었는지에 대한 정보가 필요하다. process가 cpu 제어권을 잃을때 이를 위해 여러가지 정보를 저장해두는데 이를 process context라고 한다.

커널 주소 공간
Cpu 수행 상태를 나타내는 하드웨어 문맥 : Program counter, registers
프로세스의 주소공간 : Stack,data,code
프로세스 관련 커널 자료구조 : PCB(Process Control Block), Kernel stack(process가 os에게 어떠한 요청을 하게되면 OS내에서 함수 호출이 일어나게되어 kernel의 stack에 이 process의 함수호출 결과가 저장된다.)

이러한 context를 가지고 있으면 process가 현재 어떠한 상태에 있는지 규명이 가능하다. Time sharing을 위해 cpu가 다른 process에 넘어가게 되면 현재의 상태를 기억해 놔야하는데 이를 context를 통해 한다.

프로세스의 state


Running : cpu를 잡고 instruction을 수행중인 상태
Ready : 다른 모든 준비는 되어 있고 CPU를 기다리는 상태
Blocked : CPU가 주어지더라도 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태, 예) 디스크에서 파일을 읽어와야하는 경우
New : 프로세스가 생성중인 상태
Terminated : 프로세스가 종료중인 상태(정리하는 작업)
Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태
프로세스는 통째로 디스크에 swap out 된다.
사용자가 프로그램을 일시 정지시킨 경우(ex 사람이 프로세스를 정지)
시스템이 여러 이유로 프로세스를 잠시 중단시킴(ex medium-term scheduler)

Blocked vs suspended
Blocked : 자신이 요청한 event가 만족되어야 ready
Suspended : 외부에서 resume해 주어야 active

++ 프로세스의 상태(running, ready, blocked, suspended)는 운영체제가 관리상 사용자 프로세스를 나누어 놓은 것이기때문에 운영체제의 상태를 running, ready, blocked, suspended 로 표현하지 않음. 사용자 프로세스가 수행되다가 system call을 통해 kernel 에게 cpu를 주었을때 프로세스가 kernel mode에서 사용자 process가 running 하고 있다고하지 kernel이 running 하고 있다고 하지않음

PCB(Process Control Block)

PCB
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
1. OS가 관리상 사용하는 정보 : process state, process ID, scheduling information, priority
2. CPU 수행 관련 하드웨어 값 : PC, registers
3. 메모리 관련 : Code, data, stack의 위치 정보
4. 파일 관련 : Open file descriptors…

문맥교환(Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

System call 이나 interrupt가 일어난다고 항상 문맥교환이 일어나는 것은 아님. 예를 들어 프로세스 A를 수행하던 도중 interrupt 혹은 system call이 일어나 cpu가 운영체제에게 넘아가 특정 일을 수행한 후 다시 프로세스 A에게 CPU제어권이 넘어간 경우에는 일부 context PCB에 저장되지만 새로운 프로세스의 PCB 를 읽어오는 과정이 없는 경우가 있다.


CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

  1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
  2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

문맥교환이 일어나는 경우 cache memory flush(이전 프로세스가 사용하던 cache memory를 삭제)해야기때문에 overhead가 크다.

Process scheduling queue

Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
Device queue : I/O device의 처리를 기다리는 프로세스의 집합

Scheduler

Short-term scheduler(CPU scheduler)
어떤 프로세스를 다음번에 running 시킬지 결정
프로세스에 CPU를 주는 문제
충분히 빨라야함(milisecond 단위)

Long-term scheduler(job scheduler)
시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
프로세스에 메모리를 주는 문제
Degree of multiprogramming을 제어
Time sharing system 에는 보통 장기 스케줄러가 없음(무조건 ready)

++ 메모리에 너무 많은 프로그램이 올라가도 컴퓨터의 전체의 성능이 안좋아짐 그렇다고 너무 적게 올라가도 안좋아짐. 너무 많이 올라가게되면 당장 필요한 정보가 메모리에 올라와 있지 않을 것이고 너무 적게올라가면 I/O 하러 가게 되면 CPU가 놀게된다.

Long-term scheduler는 현재 사용되고 있지 않다. 프로세스가 시작되면 일단 메모리를 준다. 그렇다면 어떻게 degree of multiprogramming을 제어할까?

Medium-Term scheduler(swapper)
여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스에게 memory를 뺏는 문제
Degree of multiprogramming을 제어

Medium-Term scheduler 때문에 프로세스의 상태가 하나 추가되었다.

Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태
프로세스는 통째로 디스크에 swap out 된다.
사용자가 프로그램을 일시 정지시킨 경우(ex 사람이 프로세스를 정지)
시스템이 여러 이유로 프로세스를 잠시 중단시킴(ex medium-term scheduler)

Blocked vs suspended
Blocked : 자신이 요청한 event가 만족되어야 ready
Suspended : 외부에서 resume해 주어야 active

++ 프로세스의 상태(running, ready, blocked, suspended)는 운영체제가 관리상 사용자 프로세스를 나누어 놓은 것이기때문에 운영체제의 상태를 running, ready, blocked, suspended 로 표현하지 않음. 사용자 프로세스가 수행되다가 system call을 통해 kernel 에게 cpu를 주었을때 프로세스가 kernel mode에서 사용자 process가 running 하고 있다고하지 kernel이 running 하고 있다고 하지않음

Thread

process 내부에 cpu 수행단위가 여러개 있는 것

Thread 의 구성
Program counter
Register set
Stack space

Tread가 동료 thread와 공유하는 부분
Code section
Data section
OS resources

Thread 의 이점

Responsiveness : web page를 띄울때 응답속도가 느린 사진으로 인해 thread 1이 blocked 되어있을때 상대적으로 응답속도가 빠른 문자를 thread 2가 문자 먼저 display 해줄 수 있다.
Resource sharing : 하나의 process를 여러 thread가 공유하게되면 code, data, os 자원을 공유할 수 있다.
Economy : thread를 새로 만드는것이 process를 새로 생성하는 것보다, thread 를 switching 하는 것이 process 를 switching 하는 것보다 overhead가 적다.
Utilization of MP(Multi Processor) Architectures : processor 가 여러개일때 각각의 thread가 서로 다른 processor를 통해 병렬적으로 동작할 수 있다.(행렬연산)

Kernel threads : thread가 여러개 있다는 사실을 운영체제가 알고 있다.
User threads : thread가 여러개 있다는 사실을 kernel이 모르고 User program이 스스로 여러 thread를 이용하는 것.

0개의 댓글