CS/OS 수업 / / 2021. 3. 22. 02:18

운영체제 4주차


프로세스

  1. 실행 중인 프로그램
  1. 프로그램을 실행시키면, OS는 디스크에 있는 프로그램 파일을 찾아서 메모리에 적재(load)하고 프로세스를 만듬

3. 실행파일(컴파일하면 생기는 프로그램)의 구조

  • 헤더(header): 파일 내 정보를 가짐(코드 섹션, 데이터 섹션 크기 등)
  • 코드 섹션: 함수 내의 기계어 코드로 바뀌어서 저장
  • 데이터 섹션: 전역 변수들을 저장

4. 프로세스 구성 요소

  • 코드(code)
  • 데이터(data): 전역 변수들을 저장
  • 스택(stack): 지역 변수 및 함수의 매개변수를 저장
  • 힙(heap): 동적 메모리 할당 영역
  • CPU 레지스터(CPU마다 레지스터 명이 다를 수도 있음)
    • PC: 프로그램 다음에 실행할 명령어 주소 값을 가짐
    • CS(Code Segment): 프로그램을 실행하면, 운영체제가 메모리에 프로세스를 생성하는데, CS는 메모리에 있는 코드의 시작 주소를 가리킴
    • DS(Data Segment): 데이터 시작 주소 값을 가리킴
    • SS(Stack Segment): Stack의 시작 주소 값을 가지고 있음(프로세스의 맨 끝 주소를 가짐. e.g. 만약 프로세스의 크기가 5000이면 SS는 5000번지를 가리킴)

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

  • 프로그램을 실행하여 프로세스가 만들어질 때, 운영체제가 프로세스를 관리하기 위해 만드는 데이터 구조 → PCB는 운영체제 내부에 생성된다. 즉, 운영체제가 올려져 있는 메모리 영역에 PCB가 생성된다.
  • 프로세스가 생성될 때마다 PCB를 생성함!!
  • 프로세스가 종료되면 PCB를 제거함!
  • PCB 내용
    • 프로세스 번호(PID)
    • 프로세스 상태(State)
    • CPU 레지스터
    • CPU 스케줄 정보: 우선순위, 스케줄 큐의 포인터 등
    • 기억장치 관리 정보: 기준 레지스터, 제한 레지스터, 기억장치 시스템의 페이지 테이블, 세그먼트 테이블의 정보 —> 메모리 어느 위치에 저장이 되어 있는지
    • 계정 정보: CPU가 사용된 양, 계정 번호, 프로세스 번호
    • 입출력 상태 정보: 입출력 요구들, 입출력 장치, 개방된 파일의 목록(현재 오픈하고 있는 파일 등. 링크드 리스트로 관리)

      PCB 내용

    6. 다중 프로그래밍(Multi Programming)

    • 여러 작업(프로세스)들을 메모리에 유지시켜서 CPU가 계속 작업(프로세스)을 실행할 수 있게 하는 기법
    • 장점: CPU 사용률을 높일 수 있다.
      • 작업이 입출력 때문에 대기하게 될 때, 운영체제가 CPU를 유휴 상태로 두지 않고 다른 작업을 실행함
      • 입출력은 대개 긴 시간이 소요되는데, 그동안 CPU를 사용할 수 있음
    • 단일 작업 기법에서는 CPU와 입출력 장치를 동시에 사용할 수 없다.
      • 입출력을 하는 동안 기다리고 CPU가 유휴상태가 됨

    7. 시분할(Time Sharing), 멀티태스킹(Multi Tasking)

    • 각 프로세스에게 CPU를 시간적으로 분할해 조금씩 사용할 수 있게 한 시스템
    • 다중 사용자(multi user) 시스템의 경우, 한 사용자에게서 다음 사용자로 빠르게 교환되기 때문에, 각 사용자는 자신만이 컴퓨터를 소유한 것처럼 느끼지만 실제로는 다수의 사용자가 하나의 컴퓨터를 공유함

    8. 프로세스 상태(Process State)

    • 프로세스는 상태(State)가 변한다
      • 생성(new): 프로세스가 생성되는 중
      • 실행(running): 프로세스의 명령어들이 실행되고 있다.
      • 대기(waiting): 프로세스가 어떤 사건(입출력 종료와 같은)이 일어나기를 기다림.
      • 준비(ready): 프로세스가 CPU를 할당받기를 기다린다(프로세스가 메모리에 적재)
      • 종료(terminated): 프로세스의 실행이 종료된다.
    • 어느 한 순간에는 한 CPU에 오직 하나의 프로세스만이 실행된다.
      • 실행 상태의 프로세스는 오직 한 개
      • 나머지 프로세스들은 대기, 준비 등의 상태에 있음

    • admitted: admitted(승인)이 되어야지 ready 상태로 바뀜. 리눅스에서 파일에는 허가권(-rwxrwxrwx)가 있는데, 실행(x)가 (-)이면 실행 권한이 없으므로 admitted가 되지 않는다. admitted가 돼면 프로세스가 메모리에 생성되고 ready 상태가 된다.
    • scheduler dispatch: 운영체제의 스케줄러 프로세스를 dispatch를 하면 ready → running 상태로 바뀐다. CPU는 한 번에 한 개의 프로세스만 실행할 수 있다. 운영체제의 스케줄러가 ready 상태인 프로세스들 중에서 dispatch한 하나의 프로세스만 running 상태이고 나머지는 ready 상태가 된다.
    • IO or event wait: 실행중인(running) 프로세스가 입출력을 하게 되면, 입출력이 끝날 때까지 running → waiting 상태로 바뀌게 된다.
    • IO or event completion: 입출력 이벤트 때문에 running → waiting 상태로 바뀐 프로세스는 입출력이 끝나게 되면 다시 waiting → ready 상태로 바뀌게 되고 나중에 스케줄러가 다시 dispatch를 하면 running으로 바뀌게 된다.
    • interrupt: 인터럽트가 발생하면 운영체제에 있는 ISR(Interrupt Service Routine)이 실행돼서, 운영체제는 현재 running 인 프로세스를 무조건 ready로 바꾸게 되고, 해당 인터럽트 작업이 끝나면 ready 상태에 있는 프로세스 중 가장 우선순위가 높은 프로세스를 다시 dispatch해서 running 상태로 전환한다.
    • exit: running 중인 프로세스가 주어진 작업을 완료하면 terminated 상태로 바뀐다. terminated 상태에서는 메모리에 적재돼 있는 프로세스를 삭제하고, 운영체제 안에 만들어진 PCB 데이터 구조를 삭제한다.

    9. Context Switching

    • CPU가 다른 프로세스로 넘어갈 때, 지금까지의 프로세스의 상태(CPU 레지스터의 내용)을 PCB에 저장(PCB에는 레지스터 값을 저장하는 공간이 있다)하고, 새 프로세스의 PCB에 저장되어 있는 정보를 다시 CPU 레지스터에 적재해야 한다. Context Switching → 프로세스 간 상태를 스위치
    • Context Switching은 시스템의 오버헤드(부하): Context Swtiching을 하는 동안에는 실제 필요한 작업(프로세스 실행)을 하지 못한다. 그래서 Context Switching 시간을 줄이는 것이 좋다.
    • Context Switching에 걸리는 시간은 하드웨어의 스펙에 따라 다르다.
      • 메모리의 read/write 속도: PCB에 내용을 저장하기 때문에 메모리 속도가 read/write 속도가 얼마나 빠르냐에 따라서 Context Switching의 속도가 달라진다
      • 레지스터의 개수: 레지스터 저장할 개수가 많으면 시간이 더 소요되므로 저장해야 할 레지스터 개수가 적을수록 좋다
      • 특수 명령어의 지원: 모든 레지스터를 한 명령어로 보관하고 적재하는 명령어 → 이 명령어를 지원하면 Context Switching이 더 빨라진다

    10. 프로세스 스케줄링(Scheduling)

    • 다중 프로그래밍은 메모리에 여러 프로세스를 유지시키는 기법
    • 시분할 시스템은 프로세스들 사이에서 시간적으로 분할해 CPU를 조금씩 사용할 수 있게 한 시스템
    • 프로세스 스케줄링: 여러 프로세스들 중에서 어떤 것을 실행할 것인지를 결정.

    11. 스케줄링 큐(queue)

    • 운영체제는 스케줄링을 위해 PCB를 큐(Queue)로 관리한다.
    • 준비 큐(Ready Queue)
      • ready 상태의 프로세스들을 관리
      • ready 상태의 PCB를 Linked List로 관리
        • Ready Queue의 헤더는 첫 번째 PCB와 마지막 PCB를 가리키는 포인터를 가지고 있다.
        • PCB는 다음 PCB를 가리키는 포인터를 가지고 있다.
    • 입출력 장치 큐
      • 각 입출력 장치는 자신의 장치 큐를 가진다
      • 입출력 장치에서 대기하는 프로세스들을 관리
      • 프로세스는 CPU를 할당 받아 실행하다가 입출력 요청을 하게 되면, 입출력 요청의 완료를 기다리게 된다. 이때, 입출력 장치에 다른 프로세스도 기다리고 있을 수 있으므로 이런 프로세스들을 연결하여 큐로 관리한다.

    12. 프로세스의 큐 이동

    • 새로 생성된 프로세스는 준비 큐에 위치된다.
    • 프로세스에 CPU가 할당되면 실행된다.
    • 프로세스의 실행 중에 위와 같이 큐를 이동할 수 있다.
      1. 입출력 요청(시스템 호출)이 발생하여 입출력 장치 큐에 위치한다. 입출력이 끝나면 ready 큐에 다시 위치한다.
      1. 시분할 시스템의 경우(타이머의 주기가 끝난 경우. 보통 10 ~ 100ms), 타이머 인터럽트가 발생하면 프로세스에 할당된 시간이 종료되어 실행 중인 프로세스가 준비 큐에 다시 위치한다.
      1. 자식 프로세스를 생성하며, 자식 프로세스가 종료하기를 기다리면서 부모 프로세스를 waiting 큐에 위치한다. 자식 프로세스가 종료하면 부모 프로세스를 ready 큐에 다시 위치시킨다.
      1. 인터럽트가 발생하면, 실행 중인 프로세스로부터 강제로 CPU 자원을 강탈하고, 다시 준비 큐에 위치시킨다. (1번 때문에 발생) → 프로세스 실행 중 입출력이 발생하면 입출력이 끝날 때까지 프로세스는 장치 큐에서 대기 중인데, 이 입출력이 끝나면 인터럽트가 발생(입출력 완료)한다. 인터럽트가 발생했으므로 실행 중이던 프로세스는 무조건 ready queue로 이동한다.

'CS > OS 수업' 카테고리의 다른 글

운영체제 8주차  (0) 2021.04.20
운영체제 7주차  (0) 2021.04.14
운영체제 6주차  (1) 2021.04.05
운영체제 2주차  (0) 2021.03.15
운영체제 3주차  (0) 2021.03.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유