실행중인 프로그램
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 상태 정보
◦ 입출력 장치들과 열린 파일의 리스트
스케줄링 큐
• 작업큐
– 시스템 안의 모든 프로세스로 구성
• 준비 완료 큐
– 실행을 대기하는 프로세스들
– 큐의 헤더는 리스트의 첫번째, 마지막 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)
마지막은 exit()로 종료
종료 시 부모 프로세스에게 상태 반환
자원은 운영체제의 품으로
TerminateProcess() – Win32 API
◦ 해당 프로세스의 부모 프로세스에서만 동작
◦ 자식의 정보는 생성할때 받음
◦ 실행 종료 요인
자원 초과, 작업 종료, 부모와 함께 종료
30.
연속적 종료
◦ 부모와 자식이 함께 종료하는 경우
◦ 자식이 순차적으로 종료되고 이어서 부모 종료
32.
프로세스간 자료 공유의 차이
협력적 프로세스를 하는 이유
◦ 정보 공유
◦ 계산 가속화
◦ 모듈화
◦ 편의성
프로세스간 통신(IPC)
◦ [I]nter[P]rocess [C]ommunication의 약자
33.
공유 메모리
◦ 프로세스 사이에 공유 가능한 메모리 할당
메시지 전달
◦ 프로세스끼리 메시지를 교환
메시지 전달이 구현에 용이
◦ 공유 메모리는 운영체제가 관리하지 않습니다
공유 메모리 접근성 우수
◦ 포인터로 접근합니다
34.
공유 메모리 생성
◦ 주로 메모리를 요청하는 프로세스의 메모리에 할당
◦ 커널 작업
공유 메모리 제약조건
◦ 양자간 합의된 상태에서 할당 가능합니다
동기화 문제
운영체제에서 메시지 전달 지원
주고(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.
직/간접적인 방법과 별개로 메시지는 임시 큐를
거쳐서 전달
큐를 구현하는 방식
◦ 무용량 : 대기가 불가능하므로 송신 봉쇄
버퍼가 없는 메시지 시스템
◦ 유한 용량 : 큐가 가득 차면 송신 봉쇄
◦ 무한 용량 : 송신은 결코 봉쇄되지 않음
◦ 유한 용량 및 무한 용량 큐는 자동 버퍼링