본문 바로가기
2023-1/운영체제

Process and Scheduling

by 철없는민물장어 2023. 3. 16.
728x90
반응형
Process Concept

OS는 다양한 프로그램을 실행한다.

-배치 시스템

-interactive 시스템

 

process란 실행중인 프로그램이다.

프로세스는 OS가 자원을 할당하는 최소단위이고, 스레드는 프로세스 내에서의 독립적인 실행단위이다.

 

프로세스는 다음을 포함한다

1. Program(코드/텍스트): 프로그램 코드와 리터럴상수를 저장

2. data : 프로그램 실행 전체에 필요한 데이터를 저장. 전역변수, static 변수, symbolic constant(#define..), 문자열 상수 등을 저장

3. Stack : OS에 의해 관리됨(자동으로 할당,해제됨). 지역변수, 함수 등이 저장된다.

4. Heap : 프로그래머에 의해 관리됨. 메모리 누수가 일어날 수 있음. 동적할당한 객체, 변수등이 저장됨.

5. Other meta data(PCB: Process Control Block)

 

/*

process image

*/

커널 모드의 경우 전체 주소영역 접근가능하고,

유저 모드의 경우 유저 영역만 접근가능하다.

 

실제로 프로그램을 작성해서

지역변수, 동적할당 변수, 전역변수, 코드 등의 주소를 출력해보면

위 그림에서 text,data,heap,stack의 위치와 변수들의주소가 대략 비슷하게 매칭되어 나온다.

 

(그런데 실제로는 process image처럼 메모리가 사용되는것은 아님.. 가상주소를 사용한다. 그래서 여러 프로세스를 실행해도 process image처럼 주소값이 매칭되어 나옴)


Process State

프로세스는 실행하면서 상태가 바뀐다.

 

  • new : 프로세스가 만들어지는 중
  • running: 프로세스가 현재 실행되고있는 중
  • waiting: I/O등의 발생으로 프로세스가 대기중
  • ready: CPU에 올릴 준비가 됨.(할당준비 완)
  • terminated: 프로세스 실행종료

 

/*

프로세스의 상태전이 process state

상태전이는 OS마다 다르다.

*/

 

fork()시 new상태, 이후 레디상태를 거쳐 러닝되고, IO발생시 웨이팅으로, 종료시 terminated

Timesharing할 때도 이 과정을 거친다.


Process Control Block(PCB)

meta-data

 

PCB가 관리하는 데이터는 이런것들이 있다(프로세스 그자체에 관한 정보)

  • Process state
  • program counter
  • CPU registers
  • CPU scheduling information
  • memory-management information
  • accounting information
  • I/O status information

PCB는 커널영역에 있다.

/*사진

여기서 맨 위에있는 커널영역..

*/

 

process table에는 

각 pid에 해당하는 PCB가 포인터로 연결돼있다.


2023.03.20

 

CPU가 작업을 교체할 때, 교환하는 데이터가 PCB이다.

 

프로세스 실행중에 인터럽트나 시스템콜이 발생하면 PCB에 상태를 저장하고, 

새로 실행하는 프로세스의 PCB를 가져와 사용한다.

 

문맥교환은 overhead를 발생시키기 때문에, 문맥교환이 많이 일어날수록 비효율적이다.

그럼에도 불구하고, 편의성을 위한 timesharing때문에 문맥교환을 많이 하게 된다.

 


PCB int UNIX

 

PCB는 

PID, Priority, State .  . . Open files, . . .등 수많은 데이터를 가지고있는데,

여러 유저가 사용하고, 여러 프로그램이 실행되니 PCB가 많아 메모리에 PCB가 차지하는 용량이 너무 커졌다.

그와중 CPU는 놀고있으니, 프로세스가 스왑될 때 PCB도 같이 스왑하면 어떤가 하는 아이디어가 생겼다

 

PCB를 두 부분으로 나눈다.

1. struct proc

: 실행중이지 않더라도 메모리에 항상 있어야 하는 정보들이다.

PID, Priority, Waiting Event, State, Location of image in disk 의 정보가 포함된다.

 

2. struct user

: 프로세스 실행중에만 필요한 데이터들이다. (이것들은 문맥교환할 때 스왑할 수 있다.) 

"u block"이라고도 불리고, 가상주소로 접근할 수 있다.

Location of image in memory, open files . .. ....등이 포함된다.

 

 

struct user 파트는 프로세스 실행중에만 필요하니, 평소에는 디스크에 저장하고, 문맥교환시마다 메모리공간으로 스왑하여 사용할 수 있게 된다.

이로 하여, 메모리에 차지하는 PCB 용량을 줄일 수 있게 되었다.

 

Process Scheduling Queues

프로세스 스케줄링 큐는 다음과 같이 나눌 수 있다.

  • Job queue: 모든 프로세스가 들어있는 큐
  • Ready queue: 실행하려고 대기중인 프로세스가 있는 큐
  • Device queues: I/O장치 프로세스 큐

 

스케줄러(Schedulers)

  • Long-term scheduler
  • Short-term scheduler
  • Medium Term scheduler

 

Long term scheduler

: 장기 스케줄러. 또는 job scheduler. Job queue에서 Ready queue로 어떤 프로세스를 넘길 지 결정하는 스케줄러이다.

 프로세스를 레디큐로 넘기기 때문에 multiprogramming의 degree를 제어하는것이 롱텀 스케줄러이다.

Short term scheduler

: 단기 스케줄러 또는 CPU scheduler. Ready queue에서 어떤 프로세스를 다음번에 CPU에 할당할지 결정하는 스케줄러.

가장 빈번하게 동작한다.

Medium term scheduler

:  때때로, 메모리에서 프로세스를 삭제하여 multiprogramming의 degree를 감소시켜야 할 때가 있다. 

CPU 효율성을 위해 degree를 높여놨는데 왜 굳이 낮출까?

"thrashing": 스레싱 때문이다.

일반적으로, degree가 높아지면 cpu활용율이 높아지는데, degree가 어느 시점을 넘어서면 cpu활용율이 뚝 떨어진다.

왜 그럴까?

메모리는 page시스템으로, 프로그램을 page단위로 쪼개어 사용한다.

가상메모리를 사용하게되면 모든 page를 메모리에 올리지 않고 몇 개의 page를 올려놓은 다음,

page를 다 읽을 때 쯤 새로운 page를 메모리에 올려 사용한다.

그래서 메모리에는 한 프로세스당 두 개 이상의 page를 올려놓을 수 있어야 한다.

그런데, 프로세스가 너무 많이 실행중이면, 한 프로세스당 하나의 page만 올릴 수밖에 없는 상황이 생기고

그렇게 되면 상당수의 프로세스는 page fault에 맞닥뜨려 제대로된 실행을 할 수 없게 된다.

 


Process는 특징에 따라 다음과 같이 분류된다.

-I/O bound process: I/O에 많은 시간 소요

-CPU bound process: 계산에 많은 시간 소요

 

리눅스에서는 I/O bound process에 더 높은 우선순위를 부여함..


2023.03.23.(목)

 

Context Switch

문맥 교환

 

CPU가 다른 프로세스로 전환할 때, 시스템은 old process의 상태를 저장하고, new process 정보를 로드해야한다.

 

문맥의 종류는 다음과 같다.

1. System Context:

커널에 의해 할당된 프로세스와 관련된 데이터가 저장된다.

PCB, Page/Segment Table, File table 등(PCB)

 

2. Hardware Context:

ProgramCounter, Stack Pointer 등(register file)

 

3. Memory Context:

메모리공간, 프로세스 이미지 등..

 

문맥 교환 시간은 순수 overhead이다. 문맥교환 중에는 아무것도 할 수 없다.

그럼에도 편의성을 위해 timesharing을 지원하면서 문맥교환이 많이 일어나게 된다.

 


Process Creation

프로세스 생성

 

프로세스는 프로세스 트리를 형성한다.(계층구조)

부모와 자식 프로세스간 자원을 공유하는 방식은 다음의 타입들이 존재한다.

1. 부모와 자식이 모든 자원을 공유(UNIX에서 사용됨)

2. 부분적으로 공유함

3. 공유하지 않음

 

부모와 자식 프로세스가 실행되는 방식은

1. 부모와 자식이 동시에 실행

2. 부모는 자식이 종료할 때까지 대기함(UNIX에서 사용됨)

 

Address space

자식 프로세스가 생기면, 부모프로세스의 주소공간을 중복되게 복사한다.(fork)

이후, 자식이 실행할 프로그램을 하드에서 읽어와 자식의 주소공간에 로드할 수 있다.(exec)

 

부모는 자식이 종료할 때까지 block됨.


Unix에서는:

fork 시스템콜을 이용하여 새 프로세스를 생성하고

exec 시스템콜을 이용하여 fork이후 프로세스 메모리공간에 새 프로그램로 교체한다.

(시스템콜은 운영체제에서 제공하는 함수이므로 다른 운영체제에서는 다른 시스템콜을 사용)

 

 fork는 프로세스를 늘리는 유일한 방법으로,

PID만 제외하고 모두 똑같은 자식이 생성된다. (fork의 반환값은 부모: 자식의pid, 자식:0)

부모와 자식은 메모리를 공유하지 않고 공간을 나눠서 각자 사용한다.

(메모리공간 카피하지 않는 vfork()도 존재)

 

exec는 디스크로부터 파일을 가져오고, old a.out image에 덮어쓰기 후, 시작위치로 점프한다.

exec는 리턴하지 않음.

 

Solaris에서는...

모든 프로세스는 init으로부터 생성..

 

728x90
반응형

'2023-1 > 운영체제' 카테고리의 다른 글

CPU scheduler  (0) 2023.04.05
Process and Scheduling 2  (0) 2023.03.31
Storage Structure/Multiprogramming/Multitasking/process/memory/file  (0) 2023.03.13
Computer System Organization(Bus, Interrupt)  (0) 2023.03.09
Operating System  (0) 2023.03.07

댓글