본문 바로가기

cs/운영체제

운영체제 5강 Process 1

https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f 

 

반효경 [운영체제] 5. Process1

설명이 없습니다.

core.ewha.ac.kr

 

프로세스

프로세스는 실행중인 프로그램을 이야기한다.

 

프로세스를 이해하는데 중요한 요점:

프로세스의 context(문맥) -> 단어가 여러 의미로 쓰이는데 문맥상에 따라서 뜻을 판단하듯이

프로세스 또한 마찬가지로 프로그램이 현재 어떤상태인지 정확하게 나타내는 개념이 context 이다

 

context: 현시점에 프로세스가 어디까지 수행했고 현시점이 어떤상태인지 나타내기 위한것

돌아가는 예시를 보면

프로세스가 실행되면 독자적인 VM 에 공간이 생기고 거기에 code,data,stack 가 생기고 cpu가 거기에 당장 읽고있는 부분을 pc(program counter)가 가리킨다. 매순간 기계어를 읽어서 레지스터에 값을넣고 ALU(산술 연산장치에서 계산해서) 다시 레지스터에 값을 올리던 아님 메모리에 값을 수정하던 한다.

이런식으로 계속 실행하는데 그래서 이러한 상태가 어디까지 진행됐는가? 프로그램이 어디까지 진행됐는가? 를 나타내는것이 context 이다.

 

context는 3 가지 요소로 나눠서 볼수있음

1.cpu 와 관련된 하드웨어 context :

 프로스세는 cpu 를 잡고 매순간 instruction을 수행함

-> 현시점에 프로세스가 어디까지 instruction을 수행했는가? 를 보는것

- program counter 가 어디를 가리키는가?

- register에는 뭐가 들어있는가?

 

2. 메모리와 관련된 프로세스의 context

현시점에 메모리 공간 code,stack,data 에 뭐가 들어있는가?

 

3. 커널 관련 context

PCB -> 프로세스를 관리하는 자료구조

커널 스택 -> 커널 관련 스택(여러 프로세스들이 공유하는 공간임) 스택이 프로세스 별로 나뉘어져있음 정보 안섞이게

 

context 가 왜 필요한가?

-> 현대의 운체는 시분할, 멀티태스킹 등등 cpu 내에서 프로세스가 계속 바뀜 그럴때 바꾸는것에 대해서 대응하기위해 뭐까지했는지 백업해놔야하니까  

프로세스의 상태 

운체에서 일단 cpu 하나밖에 없다고 치고

cpu는 하나니까 cpu를 잡고있는 프로세스는 매순간 하나이다.

 

Running : cpu를 잡고있는 프로세스

Ready: cpu 쓸려고 기다리는애들(다른 조건들 다 만족해야함 cpu 만 얻으면 바로 일할수있는애들 I/O에서 받은 정보 같은거 다 메모리에 이미 올라와서 바로 일할수있는 것

Blocked: cpu 를 줘봤자 일못하는애들 (오래걸리는 I/O 작업이 끝나야 추후의 작업을 할수있는것들) ex) 디스크에서 파일읽어오는 중이것들

new: 프로세스가 생성중인 상태

terminated: 프로세스가 종료중인상태

 

-> 시분할 ready 상태인 프로세스들이 cpu 를 잡았다 놨다 하도록 구현함

 

이런식으로 상태 변화를 생각하면됨 

이건 쭉 흐름을 보면됨 타이머와 I/O으로 프로세스가 바뀔것임

 

 프로세스들이 어떻게 돌아가나 장치들의 예시로 봐보자

하드웨어적인 것 

running 인 process 는 하나일것이다

타임아웃나면 ready queue 맨뒤에 프로세스가 줄설테고

I/O 가 일어나면 각 I/O 장치 queue에 프로세스가 줄설것이다.(blocked로 바뀜)

I/O 장치는 이렇게 들어온 요청들을 controller 의 지휘아래 처리해나갈것임

그리고 I/O 작업이 끝나면 controller 가 cpu 에 intrrupt 를 걸고

cpu가 운영체제로 넘어갈거임 -> 운영체제가 프로세스의 blocked 를 ready 로 바꾸고 ready queue로 바꿈

대충 이런형식으로 돌아간다.

 

소프트웨어 적인것

하드웨어 때문에만 blocked 되는것이 아니라 전체적으로 공유하는 공유데이터에 여러 프로세스가 동시에 접근하면 일관성이 깨질수도 있기 때문에 공유데이터에 한번에 하나의 프로세스만 접근할수있게 막기 때문에 거기에더 queue가 있고 blocked 상태로처리한다.

 

그래서 커널이 커널 데이터 영역에 자료구조(큐)를 만들어놓고 프로세스의 상태를 바꿔가며 ready 상태에있는 애들에게 cpu를 주는 형식으로 운영함

운영체제 커널이 프로세마다 관련된 정보들을 PCB를 통해서 프로세스를 관리한다.

 

PCB 구성요소(구조체로 유지)

1.운영체제가 관리상 사용하는 정보

- process state: ready 인지 running 인지 blocked 인지 나타내는것

- process ID: 프로세스 고유번호 (주민번호 같은것)

- scheduling information,priority : cpu 스케쥴링을 위한 정보들 ,우선순위

이건 추후에 cpu 스케쥴링을 공부할때 마저 볼것임

 

2.context 표시하기위한 정보들 (CPU 수행 관련 하드웨어 값

program counter,register에 뭐들어있나?

 

3.메모리 관련 context

code,data,stack 이 메모리 어디에 위치해 있는가?

 

4. 프로세스가 오픈하고 있는 파일관련

프로세스가 어떤 파일들을 열고있는가?

 

프로세스의 PCB는 이렇게 구성되어있고 운영체제가 관리하며 운영체제의 data 영역에 들어있음

 

cpu 가 매우 빠른 자원이라 cpu 를 짧은 간격으로 뻇겼다가 다시 받았다가를 반복하게됨

cpu를 다시 얻을때 뻇기던 시점의 문맥을 다시 받아서 거기부터 실행할수 있도록 해주는것

 

cpu가 사용자 프로세스 부터 다른 사용자 프로세스로 넘어가는 과정을 말함

 

프로세스를 교환할때 프로세스의 PCB에 

program counter,memory map(메모리 위치정보 map),register에 들어가있던 정보들을 저장해줌 추후에 이거 꺼내서 다시 실행할수있도록

 

cpu 를 얻게된 프로세스도 pcb에 저장되어진 정보를 cpu에 복원시킴 그다음에 cpu를 넘겨줌

 

 

컨텍스트 스위치는 운영체제로 cpu가 넘어가는게 아님 다른 사용자 프로그램으로 넘어갈때 일어나는것임

운영체제로 넘어갈떄도 cpu 수행정보(레지스터정보,program counter 정보는 저장하지만) 더큰 다른 메모리 맵이나 이딴건 저장 안해서 context switch 아님 ( 부담이적음) 거기나 프로세스는 같이 공유하는 메모리가 없으므로 캐시를 한번 씻어줘야함 그래서 더 부담됨(오버헤드가 큼)

 

 

큐들을 실제로 나누어서 보는것

아까 도식에서 쭉봤던것임

ready queue: ready 상태인 프로세스 cpu 대기줄

device queue: 디바이스 대기줄

job queue: 현재 시스템에 있는 모든 프로세스를 유지하고있는 큐(그냥 프로세스들 관리하는 집합체)

 

 

자 이런식으로 큐가 되어있는데

맨위에가 레디큐

그리고 밑에는 디바이스 큐다

그리고 프로세스를 줄세운다했는데 정확하게는 pcb를 줄세운다.

 

프로세스가 스케쥴링되는 예시 도식이다.

 

스케쥴러

순서를 정해주는것

각각의 자원별로 이번에 무슨일을 할건지 시간을 얼만큼 잡을건지 이런것(cpu 스케쥴러,디스크 스케쥴러(안다룸 수업에서) 어쩃든 이런거있음)

 

Short term scheduler (단기스케쥴러 cpu 스케쥴러)

굉장히 짧은 시간단위로 스케쥴링을 잡음

스케쥴 잡는 단위가 밀리세컨드 단위임

다음번에 어떤 프로세스에게 cpu를 줄지 정하는 스케쥴러

 

Long term scheduler(장기 스케줄러 job 스케줄러 메모리를 어떤 프로세스에게 줄지 결정하는 스케쥴러)

프로세스가 시작될때 new 에서 ready 상태로 넘어올때 admitted(허락) 되는데 메모리에 올라가는것을 admitted함

메모리에 올라가도록 허락해주는 시점임

이때 이렇게 메모리를 줄지 안줄지를 Long term scheduler 가 결정함

-시작 프로세스 중 어떤것들을 ready queue로 보낼지 결정

-degree of multiprogramming 을 제어 -> 메모리에 프로그램을 몇개올린건지 제어한다는거(메모리의 올라간 프로세스 수 를 뜻함)  메모리에 프로세스 10개 올라가있으면 degree of multiprogramming 이 10임

우리가 주로 사용하는 시분할 시스템 내에서는 보통 장기 스케쥴러가 없음 무조건 ready 상태임 -> 쓰잘떼기 없는 설명임 사실 -> 그냥 일단 ready로 박아버림 -> 그럼 메모리 어캐 조절함?  medium term scheduler로 조절함

 

Medium term scheduler(중기 스케쥴러 Swapper)

시분할 하는것들은 일단 시작하면 메모리를 무조건줌

이렇게하면 메모리에 너무많은 프로세스가 올라가면 문제가됨

- 일부프로그램을 swapper가 골라서 메모리에서 디스크로 통째로 프로세스를 쫓아냄

- 프로세스로부터 메모리를 뻇어버림

- degree of mulitprogramming 을 조절함

 

중기 스케쥴러 떄문에 프로세스의 상태가 하나 더 늘어남

suspended 상태

-> 외부에서 프로세스를 강제로 정지시켜놓은 상태

메모리를 통쨰로 뻇겼으니까 일을 못함

메모리에서 쫓겨난 상태를 말한다.

메모리 뻇긴것 이외에도 사람이 프로그램을 일시정지 시킨다든지 뭔가 정지시킬수있다. 그럴때도 메모리 잃어버리고 디스크로 밀려남

 

어쩃든 사람이 다시 재실행 시켜줘야 다시 액티브 할수있음

 

suspend 같은경우 외부에서 정지시켜놓은 상태이므로 외부에서 resume 해줘야 다시 돌아갈수있다.

 

프로세스 상태도의 좀더 자세한 도식

운영체제가 cpu 를 가지고있는경우에도 최근에 running 하고있던 프로세스가 그대로 running 인것임 운영체제가 running 하고있다 이런게 아님(monitor mode-> 운영체제가 cpu 잡고있는것)

 

suspended 도 ready 상태에서 쫓겨났는지 blocked상태에서 쫓겨났는지에 따라서 다름 

suspended여도 I/O 작업이 완료되면 suspended ready 상태가됨