[운영체제] 프로세스 관리

SU-DAA·2023년 7월 28일
0

CS기초

목록 보기
3/3
post-thumbnail

반효경 교수님의 운영체제 수업을 정리한 내용입니다

프로세스란

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

프로세스의 문맥

프로세스의 현재 상태를 나타내는것

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • 각종 레지스터
    • Program Counter
  • 프로세스의 주소 공간
    • code, data, stack
  • 프로세스 관련 커널 자료 구조
    • Kernel 스택
    • PCB

프로세스의 상태


크게 세가지로 나눈다
1. Running(실행): CPU를 가지고 수행중인 상태
2. Ready(준비): CPU를 기다리는 상태(1개 밖에 없으니까)
3. Blocked(대기): CPU를 줘도 당장 수행할 수 없는 상태, 자신이 요청한 이벤트(예:입출력)이 즉시 만족되지 않아 이를 기다리는 상태

-> PCB를 통하여 해당 상태를 알 수 있다

PCB(Process Control Block) 프로세스 제어 블록

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
운영체제 커널의 주소공간에서 프로세스 마다 PCB를 가지고 있다

  • 구성요소 네가지
  1. OS가 관리상 사용하는 정보
  2. CPU 수행 관련 하드웨어 값
  3. 메모리 관련
  4. 파일 관련

왜 커널의 메모리 공간에 저장되어 있는가?
CPU에서 뺏기기 전에 어디까지 실행 되었는지와 같은 정보를 저장하고 가지고 있어야 하기 때문에

문맥 교환

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

  • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
  • CPU를 얻는 프로세스의 상태를 그 프로세스의 PCB에서 읽어옴

프로세스를 스케줄링하기 위한 큐

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

->프로세스들은 각 큐들을 오가며 수행된다. (PCB를 그 포인터를 사용해 연결 해놓는다)

스케줄러

1. Long-term scheduler(장기 스케줄러 or job scheduler)
시작 프로세스 중(new상태) 어떤 것들을 ready queue로 보낼지 결정(메모리를 줘야 Ready로 올라감)
프로세스에 메모리 및 각종자원을 주는 문제
Degree of Multiprogramming(메모리에 올라갈 프로그램의 갯수)을 제어
시분할 system에는 보통 장기 스케줄러가 없음(무조건 Ready)

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

3. Medium-Term Scheduler(중기 스케줄러 or Swapper)
→ 이 스케쥴러의 도입으로 Process의 Suspended상태 개념이 추가됨
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스에게서 메모리를 뺐는 문제
Degree of Multiprogramming을 제어

중기 스케줄러가 도입 된 후의 프로세스의 상태


1. Running(실행): CPU를 가지고 수행중인 상태
2. Ready(준비): CPU를 기다리는 상태(1개 밖에 없으니까)
3. Blocked(대기): CPU를 줘도 당장 수행할 수 없는 상태, 자신이 요청한 이벤트(예:입출력)이 즉시 만족되지 않아 이를 기다리는 상태
4. Suspended: 외부적인 이유로 프로세스의 수행이 정지된 상태, 프로세스는 통째로 디스크에 swap out된다
-> Blocked와 Suspended의 차이: Blocked는 프로세스의 수행이 정지되어 있지는 않다

Thread 스레드

: 프로세스 중에서 CPU 수행 단위

Thread의 구성
Program Counter
Register Set
Stack Space

Thread가 동료 Thread와 공유하는 부분(=Task)
Code Section
Data Section
OS Section

스레드의 장점

  1. 빠른 응답성: 멀티 스레드 웹
  2. 자원 공유: code, data, resource 를 공유 가능
  3. 경제적 : 프로세스 하나를 만드는것에 비해서 스레드 하나를 만드는 것이 더 경제적

프로세스의 관리

프로세스 생성

부모 프로세스가 자식 프로세스를 생성
-> 그럼 어떻게 내용을 다르게 구성하나요? : fork로 새 프로세스를 복사한 후에 exec로 기존 프로세스를 새로운 프로세스로 전환한다

프로세스의 트리(계층 구조) 형성

프로세스는 자원을 필요로 함

  • 운영체제로부터 받는다.
  • 부모와 공유한다

자원의 공유

  • 부모와 자식이 모든 자원을 공유하는 모델
  • 일부를 공유하는 모델
  • 전혀 공유하지 않는 모델

수행(Execution)

  • 부모와 자식은 공존하며 수행되는 모델
  • 자식이 종료(terminate)될 때까지 부모가 기다리는(wait=blocked) 모델

fork() 시스템 콜

실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수. 이를 사용하면 실행중인 프로세스와 똑같은 프로세스가 하나 더 만들어 진다.

  • 부모 프로세스: 복사되는 프로세스
  • 자식 프로세스: 복사된 프로세스
    -부모프로세스와 자식프로세스를 어떻게 구별할까? → 부모프로세스는 자식프로세스의 ID(PID)가 양수로 나오고 자식프로세스는 0이 나옴

동작 과정

  • PID가 바뀐다.
  • 서로 차지하는 메모리 위치가 다르므로 메모리 관련 정보가 바뀐다.

exec() 시스템 콜

기존 프로세스를 새로운 프로세스로 전환하는 함수. 이미 만들어진 프로세스의 구조를 재활용 하는 것이다.

동작 과정

  • 코드 영역에 있는 기존 내용이 지워지고 새로운 코드로 바뀐다.
  • 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋된다

프로세스 종료

프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌(exit)

  • 자식이 부모에게 output data를 보냄(via wait)
  • 프로세스의 각종 자원들이 운영체제에게 반납됨

부모 프로세스가 자식의 수행을 종료시킴(abort)

  • 자식이 할당 자원의 한계치를 넘어섬
  • 자식에게 할당된 태스크가 더 이상 필요하지 않음
  • 부모가 종료(exit)하는 경우
    - 운영체제는 부모 프로세스가 종료되는 경우 자식이 더 이상 수행되도록 두지 않는다.
    - 단계적인 종료 -> 프로세스의 계층 구조가 있을 때 가장 말단에 있는 프로세스부터 먼저 종료시킨다
profile
아직은 감자

0개의 댓글

관련 채용 정보