운영체제 강의 3주차

YuJe·2022년 6월 30일
0

운영체제 스터디

목록 보기
2/2
post-thumbnail

*반효경 교수님의 운영체제 강의 영상을 기반으로 작성되었습니다

🪄 Process

1) 프로세스란? 실행중인 프로그램
↳ 프로그램이란? 디스크에 저장된 실행가능한 파일
↳ 프로그램에 해당하는 파일이 메모리에 load되었을 때 프로세스가 된다

2) 어떤 프로세스를 실행할 지는 스케줄링으로 결정

↳ Time Sharing system으로 프로그램을 실행할 때를 기준으로!

🪄 프로세스의 상태

1) New : 프로세스가 생성된 상태
2) Running : 스케줄링에 당첨되어 명령어들이 실행되는 상태
3) Waiting : 프로세스에서 I/O 요청 등의 이벤트가 발생하여 대기하는 상태
↳ CPU가 할당되어도 실행할 수 없는 상태
4) Ready : 메모리에 load되어 CPU를 기다리는 중
↳ 이벤트가 종료되어 언제든 실행할 수 있는 상태
5) Terminated : 프로세스가 종료된 상태

🪄 프로세스의 스케줄링

1) 스케줄링을 위해 프로세스가 대기하는 곳은 '큐(Queue)'이다

  1. Job queue
  • New상태의 프로세스들의 모임
  • 현재 시스템의 모든 프로세스가 대기
  1. Ready queue
  • Ready 상태의 프로세스들의 모임
  • 메인메모리에 올라온 프로세스들이 실행을 위해 기다림
  1. Device queues
  • Waiting 상태의 프로세스들의 모임
  • I/O 작업이 필요한 프로세스들이 기다림

2) 스케줄러
↳ 큐의 어떤 프로세스를 선택하여 상태를 바꿀 것인가

  1. Long-term scheduler
  • Job queue의 스케줄러
  • 어떤 프로세스를 Ready queue에 보낼 것인가를 결정
  • 프로세스에 자원을 주는 문제
    ↳ 위 프로세스 상태도의 new ->ready상태로 가는 화살표의 'admitted'란 메모리에 올라가는 것을 '허락'하는 것이다
  • long-term scheduler는 메모리에 올라가는 프로세스를 관리하기 때문에 얼마나 많은 프로세스가 메모리에 올라가는 가(degree of multiprogramming)를 제어
  • 초, 분 단위
  1. Short-term scheduler (CPU scheduler)
  • Ready queue의 스케줄러
  • 다음에 어떤 프로세스를 실행할 지 결정
  • 프로세스에 CPU를 주어 실행하는 문제
  • CPU가 작업하기 때문에 스케줄링이 아주 빠름
  • 밀리초 단위
  1. Midium-term scheduler (swapper)
  • 메모리에 올라간 프로세스의 수(degree of multiprogramming)을 줄이기 위해 필요한 스케줄링
  • 프로세스의 상태에 Suspended상태가 추가됨
  • 실행이 정지된 상태(suspended)의 프로세스를 메모리에서 제거, 디스크에 저장, 다시 디스크에서 메모리로 가져옴
    ↳ 정지되는 경우? 사용자가 프로그램을 일시 정지한 경우, 시스템이 메모리에 프로세스가 너무 많아 프로세스를 잠시 중단하는 경우
    ↳ 다시 실행되는 경우? 외부에서 재개시켜야 가능
    ↳ swap out : 메모리에서 제거되고 디스크에 저장될 때
    ↳ swap in : 디스크에 저장되었다가 외부에서 재개 또는 프로세스가 요청한 이벤트가 끝났을 때, 다시 메모리에 load되어 ready queue에서 대기할 때

🪄 PCB(Process Control Block)

1) 메모리에 계속 상주하는 Kernel 주소 공간의 'data'영역에 각각의 프로세스마다 생성된 PCB가 저장

2) PCB에 저장되는 것은?

  1. 운영체제가 관리상 사용하는 정보 : pid, process state, CPU scheduling information(예를 들면 프로세스 별 누적 CPU사용시간, 큐에서의 우선순위)
  2. CPU 수행 관련 하드웨어 값 : PC(다음에 실행할 명령어 주소), CPU register(연산 결과)
  3. 메모리 관련 : memory limits
  4. 파일 관련 : list of open files

3) 왜 필요한가? CPU가 다른 프로세스를 실행하면 현재 프로세스의 정보를 저장해야 하니까!

🪄 Context Switch

1) CPU를 현재 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정
↳ 운영체제가 현재 프로세스 상태를 PCB에 저장하고 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
2) context switch과정은 Short-term scheduling으로 선택된 프로세스를 실행 상태로 만드는 과정
3) 관리를 위해 context swtich 과정에서 CPU는 운영체제를 실행

🪄 Thread

1) 하나의 프로세스는 여러 개의 쓰레드로 나뉠 수 있다 (multithreaded process)
↳ 왜? 각 multicore(multicpu) 시스템에서 실행 단위(task)를 병렬적으로 처리하기 위해
↳ 각 쓰레드는 마치 분리된 프로세스처럼 CPU가 할당되어 쓰레드별로 처리된다
↳ 예를 들면 프로세스마다 할당된 시간이 3ms, 프로세스 하나가 3개의 쓰레드로 나뉘었다면 하나의 쓰레드는 1ms동안 실행될 수 있다
2) 같은 프로세스의 Thread는 code, data, file을 공유 && 각 쓰레드마다 별도의 PC, register, stack이 할당된다
3) 장점

  1. 프로세스 내의 한 쓰레드가가 block된 상태(waiting)여도 다른 쓰레드가 CPU를 할당받아 실행 될 수 있다
    ↳ 응답 속도가 빠르다
  2. 동일한 일을 하는 별도의 프로세스는 별도의 주소 공간을 가져 낭비를 초래하나, 동일한 일을 하는 별도의 쓰레드는 공유하는 데이터가 있기 때문에 자원을 절약할 수 있다
  3. 쓰레드를 만들고 CPU를 switching 하는 게 비용이 적다
  4. CPU가 여러 개인 MultiProcessor의 경우 각 쓰레드는 병렬적으로 작동할 수 있다

4) 구현

  1. 다중 쓰레드의 존재를 운영체제가 아는 경우
  • CPU를 넘길 때 스케줄링으로 다음 실행할 쓰레드를 스케줄링으로 선택
  1. 다중 쓰레드의 존재를 운영체제가 모르는 경우
  • 사용자 프로그램이 라이브러리의 자원을 받아 여러 개의 쓰레드를 생성하고 관리한다
  • 사용자 모드에서 실행되기 때문에 제약점이 있을 수 있다
profile
🥔

0개의 댓글