최윤종
   프로세스 개념
   프로세스 스케줄링
   프로세스에 대한 연산
   프로세스간 통신
   실행중인 프로그램
   PC의 값과 레지스터 상태 등의 활동
   함수의 매개변수, 메모리 영역을 포함
    ◦ stack, static, heap
   프로그램과의 차이
    ◦ 보조기억장치에 저장(프로그램), 주기억장치에 적재(프로
      세스)
최   스택                      지역 변수
대


                    스택 및 힙의 데이터 증가 방향



     힙                    동적 할당 영역
          전역 변수(global), 정적 변수(static), 상수(문자열 상수 포함)
    데이터
           초기화된 정적 변수 및 초기화되지 않은 정적 변수(BSS)
0   텍스트                   실행 코드 영역
   new : 프로세스 생성 중
   running : 프로세스 실행 중
   waiting : 인터럽트 대기
   ready : CPU에 의한 프로세스 재개 대기
   terminated : 종료
exit
      admitted               interrupt

                                                             terminate
new                  ready               running
                                                                 d

                             scheduler
      I/O or event            dispatch
       completion                             I/O or event
                                                  wait

                              waiting
Process Control Block
   프로세스 상태
    ◦ new, ready, running, waiting, halted
   PC(Program Counter)
   CPU 레지스터들
    ◦ 누산기, 색인 레지스터, 스택 레지스터, 범용 레지스터,
      상태 코드
   CPU 스케줄링 정보
    ◦ 프로세스 우선 순위, 스케줄 큐 포인터, 다른 스케줄 매개
      변수
   메모리 관리 정보
    ◦ 베이스 레지스터 및 한계 레지스터의 값, 페이지 테이블
      또는 세그먼트 테이블
   회계 정보
    ◦ CPU가 사용된 양, 실제 사용된 시간, 시간 제한, 계정 번
      호, 작업(또는 프로세스) 번호
   I/O 상태 정보
    ◦ 입출력 장치들과 열린 파일의 리스트
   정리하면 다음과 같습니다
스케줄링 큐
• 작업 큐
 – 시스템 안의 모든 프로세스로 구성
• 준비 완료 큐
 – 실행을 대기하는 프로세스들
 – 큐의 헤더는 리스트의 첫번째, 마지막 PCB 포
   함
 – 각 항목은 다음 프로세스의 포인터 포함
• 장치 큐
 – 장치들의 입출력을 대기하는 프로세스로 구성
PCB7             PCB2
준비     머리
완료     꼬리   레지스터들         레지스터들
큐
              …                …
자기     머리
테이프
       꼬리    PCB3             PCB14           PCB6
장치 0

디스크    머리
장치 0        레지스터들         레지스터들          레지스터들
       꼬리     …                …               …

디스크    머리
장치 1   꼬리                              PCB5


                  터미널    머리
                                      레지스터들
                  장치 0   꼬리
                                        …
준비 완료 큐                  CPU



I/O       I/O 큐    I/O 요청


                  타임 슬라이스
                    종료

          fork
           ()       fork()
          수행

          인터
                   인터럽트
          럽트
                    대기
          발생
스케줄링 시나리오
1. 생성된 프로세스는 준비 완료 큐에 큐잉
2. 실행 될 때까지 준비 완료 큐에서 대기
3. 실행후 할 수 있는 동작들
 1. 프로세스가 I/O 요청을 하여 입출력 큐에 큐잉
 2. 자식 프로세스 생성, 종료 대기
 3. 인터럽트 발생으로 준비 완료 큐에 다시 큐잉
4. 프로세스 종료시까지 1~3번 동작 반복
   장기 스케줄러(작업 스케줄러)
    ◦ 한번에 많은 프로세스들이 처리되어야 할 때 여러 프로세
      스들 중에서 선택
   단기 스케줄러(CPU 스케줄러)
    ◦ 실행 준비가 완료된 프로세스들 중에서 프로세스 선택
   장기 스케줄러
    ◦ 프로세스 선택 빈도가 적음(수 분 이상)
    ◦ 프로세스 생성 빈도와 프로세스 이탈 빈도는 반드시 동일
      해야 함
   단기 스케줄러
    ◦ 프로세스 선택 빈도가 잦음(빠르면 100ms)
    ◦ 프로세스 선택에 드는 비용은 적어야 함
   CPU/IO 중심 프로세스
    ◦ 입출력 요청 빈도의 차이
    ◦ 장기 스케줄러는 적절히 혼합해서 선택
   운영체제의 선택
    ◦ UNIX, Windows는 장기 스케줄러가 없음
    ◦ 중기 스케줄러(swapping 사용)
   인터럽트 발생 시 운영체제에서 프로세스를 잠시
    중단하고 인터럽트를 처리
   문맥 항목
    ◦ CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보
   문맥 교환에 오버헤드 발생
    ◦ 메모리 속도, 복사할 레지스터 수, 특수 명령어의 사용 여
      부 등에 의해 문맥 교환 속도 결정
실행 중


          PCB0에 상태 저장       휴지 상태
                             (idle)
       PCB1로부터 상태를 다시 적재

            인터럽트 호출         실행 중


          PCB1에 상태를 저장
                            휴지 상태
                             (idle)
       PCB0으로부터 상태를 다시 적재

실행 중
   부모 : 생성하는 주체 프로세스
   자식 : 생성된 프로세스
   프로세스는 언제든 자식 프로세스를 생성
   최초 sched 프로세스 동작
    ◦ 자식 프로세스 init 생성
    ◦ …
   ps : 자식 프로세스 리스트 출력
   프로세스 자원
    ◦ 부모로부터 완전 상속(이미지 복사)
    ◦ 부모로부터 부분 상속(선택적 상속)
    ◦ 자식 프로세스에서 획득
   프로세스 생성후 가능한 동작
    ◦ 부모와 자식이 병렬로 실행
    ◦ 부모가 자식의 완료를 대기(wait)
   메모리 환경
    ◦ 자식은 부모에게서 상속
    ◦ 자식이 새로운 프로세스로 탈바꿈(exec)
   fork()
    ◦ 반환값 : 부모(자식의 PID), 자식(0)
fork()

자식
                  부모


exec()




            대기
exit()            wait()


            재개
   CreateProcess()
    ◦ 전형적인 exec 함수
    ◦ 매개변수가 매우 많습니다.
   마지막은 exit()로 종료
   종료 시 부모 프로세스에게 상태 반환
   자원은 운영체제의 품으로

   TerminateProcess() – Win32 API
    ◦ 해당 프로세스의 부모 프로세스에서만 동작
    ◦ 자식의 정보는 생성할때 받음
    ◦ 실행 종료 요인
      자원 초과, 작업 종료, 부모와 함께 종료
   연속적 종료
    ◦ 부모와 자식이 함께 종료하는 경우
    ◦ 자식이 순차적으로 종료되고 이어서 부모 종료
   프로세스간 자료 공유의 차이
   협력적 프로세스를 하는 이유
    ◦   정보 공유
    ◦   계산 가속화
    ◦   모듈화
    ◦   편의성
   프로세스간 통신(IPC)
    ◦ [I]nter[P]rocess [C]ommunication의 약자
   공유 메모리
    ◦ 프로세스 사이에 공유 가능한 메모리 할당
   메시지 전달
    ◦ 프로세스끼리 메시지를 교환
   메시지 전달이 구현에 용이
    ◦ 공유 메모리는 운영체제가 관리하지 않습니다
   공유 메모리 접근성 우수
    ◦ 포인터로 접근합니다
   공유 메모리 생성
    ◦ 주로 메모리를 요청하는 프로세스의 메모리에 할당
    ◦ 커널 작업
   공유 메모리 제약조건
    ◦ 양자간 합의된 상태에서 할당 가능합니다
   동기화 문제
   생산자는 여유 공간이 생길 때까지 대기
   소비자는 생산 결과가 생길 때까지 대기
   운영체제에서 메시지 전달 지원
   주고(send) 받기(receive)
    ◦ 고정 길이 / 가변 길이
   통신 연결 설정
    ◦ 커널 작업
   고려 사항
    ◦ 직접/간접 통신
    ◦ 동기/비동기 통신
    ◦ 묵시적/명시적 버퍼링
   대칭적 명명
    ◦ 통신하는 프로세스는 상대방을 알아야 함
      msgsnd(qid, message, …) / msgrcv(qid, …)
    ◦ 양자에는 하나의 연결만 필요
    ◦ 통신에는 두개의 프로세스만 참여
   비대칭적 명명
    ◦ 통신하는 프로세스는 여전히 상대방을 알아야 함
      msgsnd(pid, message, …) / msgrcv(pid, …)
   통신하는 프로세스 설정의 어려움
    ◦ 손으로...
   메시지는 메일박스 또는 포트로 송수신
    ◦ 메일박스 또는 포트는 추상화 되어있음
   통신 명명
    ◦ send(A, message, …) / recive(A, …)
    ◦ A는 메일박스 또는 포트
   연결은 프로세스 사이의 공유가 있을때만 생김
   다자간 통신
   연결 수 무제한
   간접 통신의 고려사항
    ◦ 다자간 통신에서의 송신자와 수신자
    ◦ 송/수신 순서
   메일박스(추상화)
    ◦ 프로세스간 1:1 연결
    ◦ 반 이중(half duplex)
    ◦ 소유자(생성 프로세스), 소멸(연결 종료)
   운영체제와의 통신
    ◦ 간접 통신 수단은 항상 열려있음
   봉쇄형 보내기
    ◦ 송신자는 수신자가 받을 때까지 대기
   비 봉쇄형 보내기
    ◦ 송신자는 수신 완료와 상관없이 작업 재개
   봉쇄형 받기
    ◦ 수신자는 송신자에게 받을 때까지 대기
   비 봉쇄형 받기
    ◦ 수신자는 받은 메시지가 없다면 null로 처리


   송/수신 봉쇄일때는 랑데부가 생김
   직/간접적인 방법과 별개로 메시지는 임시 큐를
    거쳐서 전달
   큐를 구현하는 방식
    ◦ 무용량 : 대기가 불가능하므로 송신 봉쇄
      버퍼가 없는 메시지 시스템
    ◦ 유한 용량 : 큐가 가득 차면 송신 봉쇄
    ◦ 무한 용량 : 송신은 결코 봉쇄되지 않음
    ◦ 유한 용량 및 무한 용량 큐는 자동 버퍼링

프로세스

  • 1.
  • 2.
    프로세스 개념  프로세스 스케줄링  프로세스에 대한 연산  프로세스간 통신
  • 4.
    실행중인 프로그램  PC의 값과 레지스터 상태 등의 활동  함수의 매개변수, 메모리 영역을 포함 ◦ stack, static, heap  프로그램과의 차이 ◦ 보조기억장치에 저장(프로그램), 주기억장치에 적재(프로 세스)
  • 5.
    스택 지역 변수 대 스택 및 힙의 데이터 증가 방향 힙 동적 할당 영역 전역 변수(global), 정적 변수(static), 상수(문자열 상수 포함) 데이터 초기화된 정적 변수 및 초기화되지 않은 정적 변수(BSS) 0 텍스트 실행 코드 영역
  • 6.
    new : 프로세스 생성 중  running : 프로세스 실행 중  waiting : 인터럽트 대기  ready : CPU에 의한 프로세스 재개 대기  terminated : 종료
  • 7.
    exit admitted interrupt terminate new ready running d scheduler I/O or event dispatch completion I/O or event wait waiting
  • 8.
    Process Control Block  프로세스 상태 ◦ new, ready, running, waiting, halted  PC(Program Counter)  CPU 레지스터들 ◦ 누산기, 색인 레지스터, 스택 레지스터, 범용 레지스터, 상태 코드  CPU 스케줄링 정보 ◦ 프로세스 우선 순위, 스케줄 큐 포인터, 다른 스케줄 매개 변수
  • 9.
    메모리 관리 정보 ◦ 베이스 레지스터 및 한계 레지스터의 값, 페이지 테이블 또는 세그먼트 테이블  회계 정보 ◦ CPU가 사용된 양, 실제 사용된 시간, 시간 제한, 계정 번 호, 작업(또는 프로세스) 번호  I/O 상태 정보 ◦ 입출력 장치들과 열린 파일의 리스트
  • 10.
    정리하면 다음과 같습니다
  • 12.
    스케줄링 큐 • 작업큐 – 시스템 안의 모든 프로세스로 구성 • 준비 완료 큐 – 실행을 대기하는 프로세스들 – 큐의 헤더는 리스트의 첫번째, 마지막 PCB 포 함 – 각 항목은 다음 프로세스의 포인터 포함 • 장치 큐 – 장치들의 입출력을 대기하는 프로세스로 구성
  • 13.
    PCB7 PCB2 준비 머리 완료 꼬리 레지스터들 레지스터들 큐 … … 자기 머리 테이프 꼬리 PCB3 PCB14 PCB6 장치 0 디스크 머리 장치 0 레지스터들 레지스터들 레지스터들 꼬리 … … … 디스크 머리 장치 1 꼬리 PCB5 터미널 머리 레지스터들 장치 0 꼬리 …
  • 14.
    준비 완료 큐 CPU I/O I/O 큐 I/O 요청 타임 슬라이스 종료 fork () fork() 수행 인터 인터럽트 럽트 대기 발생
  • 15.
    스케줄링 시나리오 1. 생성된프로세스는 준비 완료 큐에 큐잉 2. 실행 될 때까지 준비 완료 큐에서 대기 3. 실행후 할 수 있는 동작들 1. 프로세스가 I/O 요청을 하여 입출력 큐에 큐잉 2. 자식 프로세스 생성, 종료 대기 3. 인터럽트 발생으로 준비 완료 큐에 다시 큐잉 4. 프로세스 종료시까지 1~3번 동작 반복
  • 16.
    장기 스케줄러(작업 스케줄러) ◦ 한번에 많은 프로세스들이 처리되어야 할 때 여러 프로세 스들 중에서 선택  단기 스케줄러(CPU 스케줄러) ◦ 실행 준비가 완료된 프로세스들 중에서 프로세스 선택
  • 17.
    장기 스케줄러 ◦ 프로세스 선택 빈도가 적음(수 분 이상) ◦ 프로세스 생성 빈도와 프로세스 이탈 빈도는 반드시 동일 해야 함  단기 스케줄러 ◦ 프로세스 선택 빈도가 잦음(빠르면 100ms) ◦ 프로세스 선택에 드는 비용은 적어야 함
  • 18.
    CPU/IO 중심 프로세스 ◦ 입출력 요청 빈도의 차이 ◦ 장기 스케줄러는 적절히 혼합해서 선택  운영체제의 선택 ◦ UNIX, Windows는 장기 스케줄러가 없음 ◦ 중기 스케줄러(swapping 사용)
  • 19.
    인터럽트 발생 시 운영체제에서 프로세스를 잠시 중단하고 인터럽트를 처리  문맥 항목 ◦ CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보  문맥 교환에 오버헤드 발생 ◦ 메모리 속도, 복사할 레지스터 수, 특수 명령어의 사용 여 부 등에 의해 문맥 교환 속도 결정
  • 20.
    실행 중 PCB0에 상태 저장 휴지 상태 (idle) PCB1로부터 상태를 다시 적재 인터럽트 호출 실행 중 PCB1에 상태를 저장 휴지 상태 (idle) PCB0으로부터 상태를 다시 적재 실행 중
  • 22.
    부모 : 생성하는 주체 프로세스  자식 : 생성된 프로세스  프로세스는 언제든 자식 프로세스를 생성
  • 24.
    최초 sched 프로세스 동작 ◦ 자식 프로세스 init 생성 ◦ …  ps : 자식 프로세스 리스트 출력  프로세스 자원 ◦ 부모로부터 완전 상속(이미지 복사) ◦ 부모로부터 부분 상속(선택적 상속) ◦ 자식 프로세스에서 획득
  • 25.
    프로세스 생성후 가능한 동작 ◦ 부모와 자식이 병렬로 실행 ◦ 부모가 자식의 완료를 대기(wait)  메모리 환경 ◦ 자식은 부모에게서 상속 ◦ 자식이 새로운 프로세스로 탈바꿈(exec)  fork() ◦ 반환값 : 부모(자식의 PID), 자식(0)
  • 26.
    fork() 자식 부모 exec() 대기 exit() wait() 재개
  • 27.
    CreateProcess() ◦ 전형적인 exec 함수 ◦ 매개변수가 매우 많습니다.
  • 29.
    마지막은 exit()로 종료  종료 시 부모 프로세스에게 상태 반환  자원은 운영체제의 품으로  TerminateProcess() – Win32 API ◦ 해당 프로세스의 부모 프로세스에서만 동작 ◦ 자식의 정보는 생성할때 받음 ◦ 실행 종료 요인  자원 초과, 작업 종료, 부모와 함께 종료
  • 30.
    연속적 종료 ◦ 부모와 자식이 함께 종료하는 경우 ◦ 자식이 순차적으로 종료되고 이어서 부모 종료
  • 32.
    프로세스간 자료 공유의 차이  협력적 프로세스를 하는 이유 ◦ 정보 공유 ◦ 계산 가속화 ◦ 모듈화 ◦ 편의성  프로세스간 통신(IPC) ◦ [I]nter[P]rocess [C]ommunication의 약자
  • 33.
    공유 메모리 ◦ 프로세스 사이에 공유 가능한 메모리 할당  메시지 전달 ◦ 프로세스끼리 메시지를 교환  메시지 전달이 구현에 용이 ◦ 공유 메모리는 운영체제가 관리하지 않습니다  공유 메모리 접근성 우수 ◦ 포인터로 접근합니다
  • 34.
    공유 메모리 생성 ◦ 주로 메모리를 요청하는 프로세스의 메모리에 할당 ◦ 커널 작업  공유 메모리 제약조건 ◦ 양자간 합의된 상태에서 할당 가능합니다  동기화 문제
  • 35.
    생산자는 여유 공간이 생길 때까지 대기  소비자는 생산 결과가 생길 때까지 대기
  • 36.
    운영체제에서 메시지 전달 지원  주고(send) 받기(receive) ◦ 고정 길이 / 가변 길이  통신 연결 설정 ◦ 커널 작업  고려 사항 ◦ 직접/간접 통신 ◦ 동기/비동기 통신 ◦ 묵시적/명시적 버퍼링
  • 37.
    대칭적 명명 ◦ 통신하는 프로세스는 상대방을 알아야 함  msgsnd(qid, message, …) / msgrcv(qid, …) ◦ 양자에는 하나의 연결만 필요 ◦ 통신에는 두개의 프로세스만 참여  비대칭적 명명 ◦ 통신하는 프로세스는 여전히 상대방을 알아야 함  msgsnd(pid, message, …) / msgrcv(pid, …)  통신하는 프로세스 설정의 어려움 ◦ 손으로...
  • 38.
    메시지는 메일박스 또는 포트로 송수신 ◦ 메일박스 또는 포트는 추상화 되어있음  통신 명명 ◦ send(A, message, …) / recive(A, …) ◦ A는 메일박스 또는 포트  연결은 프로세스 사이의 공유가 있을때만 생김  다자간 통신  연결 수 무제한
  • 39.
    간접 통신의 고려사항 ◦ 다자간 통신에서의 송신자와 수신자 ◦ 송/수신 순서  메일박스(추상화) ◦ 프로세스간 1:1 연결 ◦ 반 이중(half duplex) ◦ 소유자(생성 프로세스), 소멸(연결 종료)  운영체제와의 통신 ◦ 간접 통신 수단은 항상 열려있음
  • 40.
    봉쇄형 보내기 ◦ 송신자는 수신자가 받을 때까지 대기  비 봉쇄형 보내기 ◦ 송신자는 수신 완료와 상관없이 작업 재개  봉쇄형 받기 ◦ 수신자는 송신자에게 받을 때까지 대기  비 봉쇄형 받기 ◦ 수신자는 받은 메시지가 없다면 null로 처리  송/수신 봉쇄일때는 랑데부가 생김
  • 41.
    직/간접적인 방법과 별개로 메시지는 임시 큐를 거쳐서 전달  큐를 구현하는 방식 ◦ 무용량 : 대기가 불가능하므로 송신 봉쇄  버퍼가 없는 메시지 시스템 ◦ 유한 용량 : 큐가 가득 차면 송신 봉쇄 ◦ 무한 용량 : 송신은 결코 봉쇄되지 않음 ◦ 유한 용량 및 무한 용량 큐는 자동 버퍼링