2017년 3월 21일 화요일

operating system(4) - process

Process


1. process
 : 사용자의 요청에 의해 OS가 디스크에 있던 프로그램을 메모리에 적재하고, PCB로 관리함
   즉, 실행 중인 프로그램



=> 연산(CPU명령어의 집합)

=> 전역변수들을 저장
=> 동적 메모리 할당영역



=> 지역변수 및 매개변수 저장



 CPU의 레지스터들:
   1. CS : 코드영역의 시작 주소를 가짐
   2. DS : 데이터 영역의 시작 주소를 가짐
   3. SS : 스택영역의 시작 주소를 가짐
   4. PC : 다음 실행할 명령어의 주소값을 가짐


예시.

  

2. 프로세스 제어 블록

 1) 프로세스 제어블록이란?
    : 프로그램을 실행하여 프로세스가 만들어질 때, 운영체제가 프로세스를 관리하기 
    위해 만드는 데이터 구조
    프로세스가 생성될 때마다 PCB가 생성되고 프로세스가 종료되면 PCB는 제거된다.

 2) 프로세스 제어 블록의 내용 :
 
                 
    - 프로세스 번호(PID)
    - 프로세스 상태(state)
    - CPU 레지스터
    - CPU 스케쥴 정보
    - 기억장치 관리 정보
    - 계정 정보
    - 입출력 상태 정보 










3. 다중 프로그래밍

 : 다중 프로그래밍은 여러 작업들을 메모리에 유지시켜서 CPU가 항상 하나의 작업을 실행할 수 있게 하는 기법으로 CPU의 사용률을 높일 수 있다.
  단일 작업은 CPU와 입출력 장치를 동시에 사용할 수 없어 작업이 입출력 때문에 대기하게 된다면 운영체제는 CPU를 유휴상태로 두지 않고 다른 프로세스를 실행하도록 한다.


4. 시분할, 멀티태스킹
  : 각 프로세스에게 CPU를 시간적으로 분할해 조금씩 사용할 수 있게 하는 시스템
    => 각 사용자는 자신만이 컴퓨터를 소유한 것처럼 느끼지만 실제로는 다수의 사용자가 
       하나의 컴퓨터를 공유함

5. 프로세스 상태
  : 프로세스는 상태가 그때 그때 변한다.
     => 생성, 실행, 대기, 준비, 종료
       - 생성 : 프로세스가 생성되는 중
       - 실행 : 프로세스의 명령어들이 실행되고 있다.
       - 대기 : 프로세스가 어떤 사건이 일어나기를 기다림
       - 준비 : 프로세스가 CPU를 할당받기를 기다린다.
       - 종료 : 프로세스의 실행이 종료된다.
   => ps) 사실 더 많이 있다.

  * 어느 한순간에는 한 CPU에 오직 하나의 프로세스만이 실행된다.
     ==> 실행상태의 프로세스는 오직 한개다! 나머지는 대기 or 준비상태이다



예시.




* state : CPU의 여러 레지스터들

* save와 reload사이에 interrupt를 처리









6. 문맥 교환(Context switch)

  * 문맥 교환 : CPU가 다른 프로세서로 넘어갈 때, 현재 CPU의 레지스터들의 상태를 PCB에                   저장하고, 새 프로세서의 PCB를 다시 적재하는 작업

  * 문맥교환은 시스템의 오버헤드이다 : 문맥교환 동안에는 interrupt를 처리해야함으로
                                                  실제 필요한 작업을 하지 못한다.
       ==> 오버헤드는 작을수록 좋다.
  * 문맥 교환(오버헤드)에 걸리는 시간을 줄이는 방법 :
    1. PCB는 OS안에 만들어짐으로 메모리에 위치한다. 따라서 메모리의 읽고 쓰는 속도가
       빠를수록 문맥교환을 빨라진다.
    2. 레지스터가 많을수록 메모리로 옮길것이 많아짐으로 레지스터의 수가 적을수록 문맥
       교환 속도가 빨라진다.
    3. 일부 제품은 한 명령어로 CPU의 레지스터들을  메모리로 한번에 옮긴다.
       ==> 문맥교환은 하드웨어의 지원에 따라 달라진다.


7. 프로세스 스케줄링
  : CPU 이용률을 최대화 하기위해 여러 프로세스들 중에서 어떤 것을 실행할 것인지를
   결정하는 것

  1) 스케줄링 큐
    * 준비 큐(Ready queue)
      - 실행하기 위해 주기억장치(메모리)에서 준비하고 있는 프로세스들을 관리
      - 일반적으로 연결리스트 형태로 관리된다.
        > 준비 큐의 헤더는 첫벗째 PCB와 마지막 PCB를 가리키는 포인터를 가지고 있다.
        > PCB는 다음 PCB를 가리키는 포인터를 가지고 있다.
 
    * 입출력 장치 큐
      - 각 입출력 장치는 자신의 장치 큐를 가진다.
      - 입출력 장치에서 대기하는 프로세스들을 관리
      - 프로세스는 CPU를 할당받아 실행되다가 입출력 요청을 하게되면, 입출력 요청의
       완료를 기다려야한다. 이때, 입출력장치에 다른 프로세스들도 기다리고 있으므로
       대기하고 있는 프로세스들을 연결하여 큐로 관리한다.


예시.(준비 큐와 입출력장치 큐)
 * ready state : ready queue (준비 큐)
 * waiting state : device queue (장치 큐)
   : 장치큐는 장치마다 하나씩 존재하며 입출력 요청을 하고 끝날때까지 기다리는
   프로세스들을 큐로 연결한 것이다. 입출력이 완료되면 준비큐의 끝에 연결되어
   자신의 차례를 기다린다.
===> 결론 : PCB가 이동한다!!!



예시.(프로세스(PCB)의 큐 이동)
 * 새로 생성된 프로세스는 ready queue에서 대기한다.
 * 대기하던 프로세스는 CPU를 할당받아 실행된다.
 * 프로세스가 실행되던 도중 위와 같은 4가지 사건이 발생할 수 있다.
   - I/O interrupt가 발생하여 입출력장치 큐에 위치하고 입출력이 끝나면 준비큐로 복귀
   - 시분할 시스템의 경우 timer interrupt가 발생하면 준비 큐로 다시 복귀
   -  자식 프로세스를 생성하여 자식이 먼저 종료되길 기다리다가 종료되면 준비큐로 복귀
   - 특정 interrupt를 기다리다가 발생하면 레디큐로 돌아간다.
    ex. 입출력 요청을 하고서 입력 완료 interrupt가 발생하길 기다리는 것
       ps) 현재 진행 프로세스가 기다리는 것이 아니다!!















































댓글 1개:

  1. 잘읽었습니다. 요약이 정말 잘되있네요!! 다음강의도 올려주세요

    답글삭제