Jun 개발노트

운영체제 03

2020-01-27

운영체제 3

  1. 프로그램과 프로세스의 차이점
    • 무덤 속 프로그램, 살아 움직이는 프로세스
  2. PCB(Process Control Block)
    • 프로세스에 대한 모든 정보
      • 프로세스 상태(running, ready, waiting)
      • PC, registers, MMU info, CPU time.....
  3. Job Que : 하드디스크에서 메인 메모리로 들어오기 위한 줄
    • Job Scheduler : long term Scheduler -> 시간이 올래걸린다.
    • 메인메모리에 올라오는 프로세스가 한쪽으로 쏠리는(IO / 연산)것을 방지하기 위해 적절히 배분해준다.
  4. Ready Que : CPU 서비스를 받기 위한 줄(PCB Number에 따라)
    • CPU scheduler : Short term Scheduler -> 시간이 잛다.
    • CPU 서비스를 누가 먼저 받을 것인가?
  5. Device Que : 프린터 작업
  6. 멀티프로그래밍 : 메인메모리에 여러개의 프로세스가 올라와있는 상태
    • Medium-term scheduler
    • 파워포인트를 켜놓고 다른 일을 하면, 파워포인트는 메인 메모리에서 자리만 차지하고 있다.
    • 대기하는 프로세스를 하드 디스크의 Backing Store로 Swapping(이동)
    • 메인 메모리에 자리가 비웟다면 다시 Swapping 시켜 원위치를 시켜준다.
  7. 하드디스크 : 파일시스템 / Backing Store(대기하고 있는 프로세스들의 공간)
  8. Context Switching : CPU가 하는일 바뀌는 거 (1번 일하다가, 2번일 하는거)
  9. CPU Scheduling : Ready Que에서 누가 먼저 들어갈래 ?? 스케줄링
  10. dispatcher
  • 메인메모리에 올라와있는 프로세스과 전환이 되면서 원래 작업하던 프로세스 정보를 저장하고 다음 프로세스 정보를 불러오는 것(운영체제 안에 있다.)
  1. Context Switching OverHead : dispatcher가 자주 발생하면 오버헤드 발생

CPU 스케줄링

  1. Preemptive vs Non-preemptive : 선점(응급실에서 급한 사람이 있으면 먼저 처리), 비선점(은행 줄)

  2. 스케줄링하는 기준

    • CPU Utilization (CPU 이용률)
    • Throughput (처리율)
    • Turnaround time (반환시간) process 시작 시간 부터 종료 시간까지
    • Waiting time (대기시간) cpu서비스 받기 전까지
    • Response time (응답시간) 첫 응답시간
  3. First-Come, First-Served (FCFS)

    • 자료구조 큐와 같음
    • 장점 : 균일
    • 단점 : 호위효과(대기자가 계속 기달린다 like 호위자 같다)
  4. Shortest-Job-First (SJF)

    • 실행시간이 짧은 것 부터 먼저 실행
    • 가장최고의 방법이지만, 실행시간을 아는것은 예측일뿐이다. 비현실적이다. – Shortest-Remaining-Time-First
      • 첫 작업은 도착순서에 따라 작동하고
      • 작업 중에 여러 프로세스가 도착한다면 도착한 것 중에 짧은것을 기준으로 먼저 실행
      • 먼저 하던 작업은 다른 프로세스들과 경쟁
  5. Priority : 우선순위에 따라 실행

    • 우선순위 기준
      • 내부 : time limit, memory requirement, i/o to CPU burst
      • 외부 : amount of funds being paid, political factors
    • 문제
      • 우선순위에 밀려서 계속해서 기달리는 상태 기아 => 해결책 : 대기시간이 늘수록 우선순위 높여줌
  6. Round-Robin (RR)

    • 일정시간을 기준으로 프로세스를 변경해준다
    • 일정시간이 무한대면 큐처럼 작동한다
    • 일정시간이 0에 수렴하면 오버해드 발생
  7. Multilevel Queue

    • 프로세스 그룹화 목적에 따라 다른 알고리즘 적용
  8. Multilevel Feedback Queue

    • 프로세스를 계속해서 돌면 다른 알고리즘을 사용하는 그룹으로 이동
    • RR -> FCFS -> SJF
  • CPU(PC / SP (프로그램 카운터 / 스택 포인트)) --- MMU(Base register / limit register) ---- Main Memory

프로세스 생성

  1. 프로세스는 프로세스에 의해 만들어진다(부모, 자식, 프로세스 트리)
  2. 운영체제가 부팅이 되고 나서 첫 프로세스를 만듬(유닉스는 init 이라고 한다)
  3. 프로세스 트리에 대한 번호 == 유니크한 번호(죽은 이후에는 다시 쓸수 있음) PPID == 부모 번호
  4. 새로운 프로세스를 만든다 포크한다 fork() => 시스템콜 = 부모프로세스를 복사
  5. 실행파일을 메모리에 가져온다 exec() => 시스템 콜

프로세스 종료

  1. exit() system call
  2. 해당 프로세스가 가졋던 모든 자원은 os에게 반환

쓰레드

  1. 프로그램 내부의 흐름, 맥 : 쓰레드
  2. 쓰레드가 빠른 시간 간격으로 스위칭 된다. => 쓰레드가 동시에 실행되는 것처럼 보인다.
    • 한 프로세스에는 기본 1개의 쓰레드 - 단일 쓰레드 (single thread) 프로그램
    • 한 프로세스에 여러 개의 쓰레드 - 다중 쓰레드 (multi-thread) 프로그램
  3. 운영체제 발전에 따라 Context Switch단위가 프로세스 -> 쓰레드
  4. 쓰레드 구조
    • 프로세스의 메모리 공간 공유 (code, data)
    • 프로세스의 자원 공유 (file, i/o, …)
    • 비공유: 개별적인 PC, SP, registers, stack