제 2 장 프로세스 개념 및 관리

71
Page 1 컴컴컴컴컴컴 컴컴컴컴 제2제 제제제제 제제 제 제제 컴컴컴컴 OS Operating Systems

Upload: wesley-acosta

Post on 03-Jan-2016

106 views

Category:

Documents


0 download

DESCRIPTION

제 2 장 프로세스 개념 및 관리. OS. 운영체제. Operating Systems. 개념 작업 (job) 실행 프로그램과 이에 필요한 입력 데이터의 묶음 컴퓨터에 실행 의뢰되기 전의 상태 프로세스 (process) 커널에 등록된 작업 커널에 등록되어 커널의 관리하에 들어간 작업. 작업과 프로세스의 개념 비교. 커널. 프로그램. 등록. 컴퓨터 시스템. 데이타. 프로세스. 작업. 프로세스의 정의. 프로세스 정의 실행중인 프로그램 ( 작업 ) 커널에 등록되고 커널의 관리하에 있는 작업 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 제 2 장 프로세스 개념 및 관리

Page 1컴퓨터공학과 운영체제

제 2 장프로세스 개념 및 관리

운영체제OS Operating Systems

Page 2: 제 2 장 프로세스 개념 및 관리

Page 2컴퓨터공학과 운영체제

개념 작업 (job)

실행 프로그램과 이에 필요한 입력 데이터의 묶음 컴퓨터에 실행 의뢰되기 전의 상태

프로세스 (process) 커널에 등록된 작업 커널에 등록되어 커널의 관리하에 들어간 작업

프로그램

데이타

작업

커널등록

프로세스컴퓨터 시스템

작업과 프로세스의 개념 비교

Page 3: 제 2 장 프로세스 개념 및 관리

Page 3컴퓨터공학과 운영체제

프로세스의 정의 프로세스 정의

실행중인 프로그램 ( 작업 )

커널에 등록되고 커널의 관리하에 있는 작업

각종 자원들을 요청하고 할당받을 수 있는 개체

PCB( 프로세스 관리 블록 ) 을 할당받은 개체

능동적인 개체 실행 중에 각종 자원을 요구 , 할당 , 반납하며 진행

Page 4: 제 2 장 프로세스 개념 및 관리

Page 4컴퓨터공학과 운영체제

자원의 개념 자원의 개념

커널에 의해 다른 주체 (process) 에게 할당 또는 반납되는 피동적인 개체

자원의 분류

하드웨어 자원

소프트웨어 자원

기억장치 , 프로세서 , 하드 디스크 , 자기 테이프 , 단말기 , 모니터 , 키보드 등

메시지 , 시그널 (signal), 화일 , 각종 공유 소프트웨어 등

Page 5: 제 2 장 프로세스 개념 및 관리

Page 5컴퓨터공학과 운영체제

프로세스 제어 블록 (PCB) Process Control Block 커널 공간 (kernel space) 내에 존재

프로세스의 일생 동안 프로세스의 모든 정적 및 동적인 정보를 가짐 ( 시스템 수준 문맥 )

커널에 등록된 각 프로세스들에 대한 정보를 저장하는 영역

커널은 PCB 를 통해 프로세스 관리 준비 리스트 , 대기 리스트 : PCB 의 리스트

Page 6: 제 2 장 프로세스 개념 및 관리

Page 6컴퓨터공학과 운영체제

PCB

Memory

Kernel PCB-1 PCB-2 PCB-n

P1

P2

Pn

각 프로세스들에 대한상태정보 저장

Page 7: 제 2 장 프로세스 개념 및 관리

Page 7컴퓨터공학과 운영체제

PCB

PCB 내의 정보 프로세스 고유 번호 (PID : Process Identification Number) 프로세스 우선순위 (priority)

우선순위 - 기반 스케줄링시 필요한 정보 프로세스 현재 상태 (current state) 메모리 관리 정보 (Memory management information)

Base/limit registers, page tables, segment tables I/O 상태정보 (I/O status information)

List of I/O devices allocated, list of open files 문맥 저장 영역 (context save area)

실행중인 프로세스의 일시 중지시 레지스터 문맥의 저장 영역

PCB 에 저장되어야 할 정보는 운영체제에 따라 서로 다름커널의 PCB 영역 참조 및 갱신 속도 개선은 시스템 전체 성능에 중요함

Page 8: 제 2 장 프로세스 개념 및 관리

Page 8컴퓨터공학과 운영체제

프로세스 상태 프로세스 상태

현재 소유 / 요청하고 있는 자원들의 종류에 따라 구분

활동 상태(active,

swapped-in)

실행 상태(running)

준비 상태(ready)

프로세스 상태의 종류 및 특성

상 태 특 성

프로세서를 할당받은 상태

대기 상태(blocked, asleep)

필요한 자원을 모두 소유하고프로세서를 요청하고 있는 상태

프로세서외 다른 자원도 없는 상태

기억장치를할당받은

상태

지연 상태(suspended, swapped-out)

지연 준비 상태(suspended ready)

지연 대기 상태(suspended blocked)

프로세서를 요청하고 있는 상태

프로세서외 다른 자원도 없는 상태

기억장치를잃은상태

Page 9: 제 2 장 프로세스 개념 및 관리

Page 9컴퓨터공학과 운영체제

Page 10: 제 2 장 프로세스 개념 및 관리

Page 10컴퓨터공학과 운영체제

Page 11: 제 2 장 프로세스 개념 및 관리

Page 11컴퓨터공학과 운영체제

Page 12: 제 2 장 프로세스 개념 및 관리

Page 12컴퓨터공학과 운영체제

Page 13: 제 2 장 프로세스 개념 및 관리

Page 13컴퓨터공학과 운영체제

Page 14: 제 2 장 프로세스 개념 및 관리

Page 14컴퓨터공학과 운영체제

running

ready

suspendedblocked

suspendedready

asleep(blocked)

terminated

created

dispatch

(schedule)

timerrunout

(preemption)

exit

sleep

(block)

wakeup

swap-out

(suspend)

swap-out

(suspend)

swap-in

(resume)

swap-in

(resume)

(active)(suspended)

wakeup

프로세스 상태전이도

Page 15: 제 2 장 프로세스 개념 및 관리

Page 15컴퓨터공학과 운영체제

생성 상태 (created state) 사용자가 요청한 작업이 커널에 등록되고 PCB 가 할당되어 새로운 프로세스가 만들어지는 상태 일시적으로 거쳐가는 상태

커널 기억장치 공간 검사 준비 상태 또는 지연 준비 상태로 전이시킴

프로세스 상태

Page 16: 제 2 장 프로세스 개념 및 관리

Page 16컴퓨터공학과 운영체제

준비 상태 (ready state) 프로세스가 필요한 모든 자원을 할당받고 프로세서를

할당받기 위해 기다리고 있는 상태 프로세서만 할당받으면 즉시 실행 가능한 상태

디스패치 (dispatch) 또는 스케줄 (schedule) 준비 상태에서 실행 상태로의 전이

프로세스 상태

Page 17: 제 2 장 프로세스 개념 및 관리

Page 17컴퓨터공학과 운영체제

실행 상태 (running state) 프로세서에 의해 실행되고 있는 상태 프로세스가 원하는 모든 자원 ( 프로세서까지 ) 을 소유한 상태 타임 슬라이스를 소진하거나 , 입출력 요구 등을 하여 CPU 를

자진 반납할 때까지 실행 상태

선점 (preemption) 실행중인 프로세스가 프로세서 시간 할당량 (time quantum, time slic

e) 종료 , 우선순위 등으로 인하여 자신에게 할당된 프로세서를 반납해야 하는 경우 준비 상태로 전이

블럭 (block/sleep) 프로세스가 실행 중 자원을 요청하거나 기타 다른 이유로 system cal

l 을 하는 경우 대기 상태로 전이

프로세스 상태

Page 18: 제 2 장 프로세스 개념 및 관리

Page 18컴퓨터공학과 운영체제

사용자 모드 실행 (user mode running) : 사용자나 라이브러리 코드가 실행되고 있는 상태

커널 모드 실행 (kernel mode running 또는 system mode running) : 프로세스가 시스템 호출을 하거나 인터럽트 발생으로 커널 내부로 진입하여 커널의 코드부분이 실행되는 상태

사용자 모드 특수 레지스터에 CPU 의 모드가 사용자 모드임이 표시됨 다른 사용자 영역에의 침입이나 특권 명령어 및 자원의 무단 사용을 막기

위해 보호 하드웨어가 작동됨 커널 모드

입출력 장치나 자원 관리와 관계된 특권 명령어 (privileged instruction) 실행 가능

보호 하드웨어 통과

Page 19: 제 2 장 프로세스 개념 및 관리

Page 19컴퓨터공학과 운영체제

대기 상태 (blocked/asleep state) 프로세스가 프로세서 외의 특정 자원을 요청하고 이를

할당받을 때까지 기다리고 있는 상태 입출력 요구 , 사건 발생 대기 중에는 CPU 가 필요 없음 . CP

U 반납 후 사건 발생 시까지 대기 대기 상태 중에도 I/O 는 진행될 수 있음 CPU 와 I/O 를 overlap 할 수 있는 기반이 됨 system call SVC(Supervisor Call)

커널은 프로세스의 요청을 받기 위한 system call interface 를 제공

wakeup 프로세스가 요청한 자원을 할당받는 등의 event 가 발생하면

다시 준비 상태로 전이

프로세스 상태

Page 20: 제 2 장 프로세스 개념 및 관리

Page 20컴퓨터공학과 운영체제

지연 상태 (suspended state)

프로세스 생성 후 기억 장치의 양이 부족한 경우

지연 준비 상태 (suspended ready state) 준비 상태의 프로세스가 기억장치 잃은 경우

지연 대기 상태 (suspended asleep state) 대기 상태에서 기억장치를 잃는 경우

활동 상태의 프로세스가 기억장치를 잃게 되는 이유 커널에 의해 선택되는 경우 : 시스템 기능 이상 , 시스템 과부하 프로세스 스스로 기억장치를 반납하는 경우 : 실행 도중 프로그램의 의심스런 부분

확인

swap-out(suspend) 프로세스가 기억장치를 잃는 경우

swap-in(resume) 프로세스에게 기억장치가 할당되는 경우

프로세스 상태

Page 21: 제 2 장 프로세스 개념 및 관리

Page 21컴퓨터공학과 운영체제

Page 22: 제 2 장 프로세스 개념 및 관리

Page 22컴퓨터공학과 운영체제

종료 상태 (terminated/zombie state) 프로세스의 실행이 완료되어 모든 자원들을 반납하고 커널 공간 내에 PCB 등의 프로세스 관리 정보만이 남아 있는

상태

프로세스 상태

Page 23: 제 2 장 프로세스 개념 및 관리

Page 23컴퓨터공학과 운영체제

프로세스의 상태 전이

신규

준비

대기

실행

종료작업스케줄러

타임 슬라이스 소진비자발적 문맥 교환

CPU 스케줄러입출력 완료 등

사건 발생입출력 요구 ,동기화 대기 등자발적 문맥 교환

Page 24: 제 2 장 프로세스 개념 및 관리

Page 24컴퓨터공학과 운영체제

Page 25: 제 2 장 프로세스 개념 및 관리

Page 25컴퓨터공학과 운영체제

Page 26: 제 2 장 프로세스 개념 및 관리

Page 26컴퓨터공학과 운영체제

Scheduling Queues Ready queue

준비 상태의 프로세스들의 공통점 프로세서 외의 모든 자원을 확보한 상태로 프로세서 요청 중임

준비 - 큐 (ready queue), 준비 - 리스트 (ready list) 프로세스 스케줄링 (process scheduling)

프로세서 가용시 , 준비 리스트로부터 한 프로세스를 디스패치함

running

ready asleep

dispatch

(schedule)

timerrunout

(preemption)

sleep

(block)

wakeupP1P2P3 ready

list

준비 리스트

Page 27: 제 2 장 프로세스 개념 및 관리

Page 27컴퓨터공학과 운영체제

Block queue 대기 상태의 프로세스 큐 각 프로세스가 요구한 자원의 종류에 따라 분류 가능 대기 - 리스트 (block list), 대기 - 큐 (block queue)

각 자원의 종류별 관리 큐의 개수 커널이 관리하는 자원의 종류의 수

running

ready asleep

dispatch

(schedule)

timerrunout

(preemption)

sleep

(block)

wakeupP11 P12 P13

P21 P22

Pk1 Pk2 Pk3blockedlist

Scheduling Queues

대기 리스트

Page 28: 제 2 장 프로세스 개념 및 관리

Page 28컴퓨터공학과 운영체제

Thread 개념 Thread 정의

Lightweight process(LWP: 경량 프로세스 ) CPU 스케줄의 단위 구성

Thread ID Program counter Register set Stack

같은 프로세스에 속한 모든 thread 들은 코드 , 데이터 , 파일 등의 자원을 공유한다

응용분야 : web server, RPC server, web browser 전통적인 기존 process : single thread of control

Page 29: 제 2 장 프로세스 개념 및 관리

Page 29컴퓨터공학과 운영체제

Thread 개념

모든 thread 들에게 공유되는 항목 각 thread 마다 독립적으로

할당되는 항목

Page 30: 제 2 장 프로세스 개념 및 관리

Page 30컴퓨터공학과 운영체제

Single/Multi-threaded processes

code data files

registers stack registers

stack

registers

stack

registers

stack

code data files

단일 thread 다중 thread

thread

Page 31: 제 2 장 프로세스 개념 및 관리

Page 31컴퓨터공학과 운영체제

Three processes each with one thread One process with three threads

Page 32: 제 2 장 프로세스 개념 및 관리

Page 32컴퓨터공학과 운영체제

Thread 개념 이점

Responsiveness( 응답성 )

Resource sharing( 자원공유 )

Economy( 경제성 )

Utilization of multiprocessor architectures ( 다중처리기 구조의 활용 )

Page 33: 제 2 장 프로세스 개념 및 관리

Page 33컴퓨터공학과 운영체제

A word processor with three threads

Page 34: 제 2 장 프로세스 개념 및 관리

Page 34컴퓨터공학과 운영체제

A multithreaded Web server

Page 35: 제 2 장 프로세스 개념 및 관리

Page 35컴퓨터공학과 운영체제

While (1){ clientFd = accept(serverFd, clientSockAddrPtr, &clientLen); // if (fork() == 0) // { writeRecipe(clientFd); close(clientFd); // exit(0); // } // else // close(clientFd);}

//clone(writeRecipe2, child_stack, CLONE_VM|CLONE_FILES, arg);

Page 36: 제 2 장 프로세스 개념 및 관리

Page 36컴퓨터공학과 운영체제

Implementing Threads in User Space

A user-level threads package

Page 37: 제 2 장 프로세스 개념 및 관리

Page 37컴퓨터공학과 운영체제

Implementing Threads in the Kernel

A threads package managed by the kernel

Page 38: 제 2 장 프로세스 개념 및 관리

Page 38컴퓨터공학과 운영체제

Hybrid Implementations

Multiplexing user-level threads onto kernel- level threads

Page 39: 제 2 장 프로세스 개념 및 관리

Page 39컴퓨터공학과 운영체제

Pthread example(1)#include <stdio.h> #include <pthread.h> void consumer (void); // thread function prototype char buffer[n]; int n, in = 0, out = 0; int main () { char nextp; int i; pthread_t tid; pthread_create (&tid, NULL, consumer,NULL); // consumer thread 의 생성 // main thread 는 producer 의 역할을 한다 . // consumer thread 와 병행으로 수행된다 . for (i = 0; i < 500; i++) { produce an item in nextp while ( (in+1) % n == out) ; // 대기 loop buffer[in] = nextp; in++; in %= n; } pthread_join (tid); }

Page 40: 제 2 장 프로세스 개념 및 관리

Page 40컴퓨터공학과 운영체제

Pthread example(2)void consumer(void) { char nextc; for (i = 0; i < 500; i++) { while (in == out) ; // 대기 loop nextc = buff[out]; out++; out %= n; ... consume the item in nextc; } }

Circular Buffer

Consumer

ProcessProducer

Process

ProducerProcess

Page 41: 제 2 장 프로세스 개념 및 관리

Page 41컴퓨터공학과 운영체제

인터럽트 처리 및 문맥 교환 인터럽트 개념

unexpected event

인터럽트의 일반적인 종류 입출력 인터럽트 (I/O interrupt) 클럭 인터럽트 (clock interrupt) 콘솔 인터럽트 (console interrupt) 프로세스간 통신 인터럽트 (interprocess communication interrupt) 시스템 호출 인터럽트 (system call interrupt, SVC interrupt) 프로그램 오류 인터럽트 (program check interrupt) 하드웨어 검사 인터럽트 (machine check interrupt)

Page 42: 제 2 장 프로세스 개념 및 관리

Page 42컴퓨터공학과 운영체제

인터럽트 처리 과정인터럽트 발생

프로세스 중단

인터럽트 처리 (interrupt handling) 인터럽트 발생 장소 , 원인 파악

인터럽트 서비스 할 것인지 결정

인터럽트 서비스 루틴 (interrupt service routine) 호출

커널 : 인터럽트 발생시 항상 개입하여 인터럽트의 처리 과정 및 인터럽트 서비스 과정을 제어함

Page 43: 제 2 장 프로세스 개념 및 관리

Page 43컴퓨터공학과 운영체제

인터럽트 처리 과정

Pi

Interrupthandler

프로세서ISR-1ISR-2

ISR-n

Kernel

주기억장치인터럽트 발생

PCBiContext saving

Interrupt

handling

Interrupt

service

Context restoring

PCBj

Page 44: 제 2 장 프로세스 개념 및 관리

Page 44컴퓨터공학과 운영체제

문맥 보존 및 문맥 교환 문맥 (context) 의 의미

특정 프로세스와 관련된 정보들의 총집합 프로세스의 실행 중단시 보존되고 , 속개시 다시 원상 복구되어 야 하는 프로세스의 실행을 위한 모든 정보

context saving 실행중인 프로세스의 레지스터 문맥 보존을 위하여 저장하는 일

context restoring 기존에 저장되었던 문맥을 프로세서로 다시 이동시키는 일

context switching 실행 상태의 프로세스를 다른 프로세스로 교체하기 위하여

그들의 문맥을 각각 save 하고 restore 하는 일

Page 45: 제 2 장 프로세스 개념 및 관리

Page 45컴퓨터공학과 운영체제

프로세스 문맥의 구성

텍스트 (text) 영역 자료 (data) 영역 스택 (stack) 영역

사용자 수준 문맥 (user-level context)

CPU 내의 각종 범용 및 특수 레지스터의 내용 (Program counter register 포함 ) 프로세스의 현재의 각종 자원 사용 정보 기타 커널의 프로세스 관리 정보

시스템 수준 문맥 (system-level context)

Page 46: 제 2 장 프로세스 개념 및 관리

Page 46컴퓨터공학과 운영체제

문맥 교환 (context switching)

시분할 기반의 스케줄링에 의한 CPU 선점이나 , 프로세스 스스로 입출력 요청에 의해 CPU 를 반납할 때 , CPU 는 다른 프로세스에게 할당된다 .

이때 , 실행이 정지되는 프로세스의 문맥은 보존되고 , 새로 실행되는 프로세스의 문맥이 활성화된다 .

사용자 수준 문맥은 메모리에 남아 있으나 , 레지스터의 내용들은 추후의 복구를 위해 저장되고 , 새로운 문맥이 적재된다 .

Page 47: 제 2 장 프로세스 개념 및 관리

Page 47컴퓨터공학과 운영체제

문맥 교환

Registers범용 registers

Program Counter

Stack Pointer, 기타

실행 중단 프로세스의 문맥 정보

실행 속개 프로세스의 문맥 정보

save restore

Page 48: 제 2 장 프로세스 개념 및 관리

Page 48컴퓨터공학과 운영체제

UNIX KERNEL 5 - 10 % of total UNIX OS

memory 상주 - 90% C - 10% Assembly

효율성 , 하드웨어 제어부분 3 부분

프로세스 관리 파일 시스템 I/O 시스템

2 modes of machine operations kernel mode user mode

for protection (memory space, privileged instruction

등 )

Page 49: 제 2 장 프로세스 개념 및 관리

Page 49컴퓨터공학과 운영체제

UNIX KERNEL 모드 전환

user's source program : " read next word from file X into variable y " object program : 시스템 호출을 위한 매개변수 준비 인터럽트 실행 CPU : save state vector( 문맥 ) CPU mode ← kernel mode 로 전환 인터럽트 서비스 루틴으로 이동 OS : (interrupt handler 는 커널 영역 ) interrupt 원인 파악 (system call, illegal code, address fault,....) 해당 kernel procedure 로 이동 | system call service | OS 가 CPU mode ← user mode 로 전환 restore state vector( 문맥 ) Now, back to user program.

Page 50: 제 2 장 프로세스 개념 및 관리

Page 50컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT PCB(process control block)

In UNIX, PCB is divided into 3 parts u proc text

All in the kernel address space used by kernel for system call services

Page 51: 제 2 장 프로세스 개념 및 관리

Page 51컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT Proc Table

process마다 하나씩 할당됨 항상 memory 에 상주 allocated when process is created freed when process is terminated 저장 내용

프로세스가 디스크로 swap-out 되었을지라도 메모리에 남아있어야 하는 부분들

process id, 상태 , 우선순위 , waiting event, location of "image" (text segment, data segment,.....)

프로세스가 실행중이 아닌 중에도 시스템에 의해 필요한 정보들

Page 52: 제 2 장 프로세스 개념 및 관리

Page 52컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT U block (1024 bytes)

프로세스가 실행중일 때만 시스템에 의해 필요한 정보들 프로세스와 함께 swap-out 가능 low overhead for suspended process (only proc table entry, which is few words !) CONTENT of u block

open files descriptor directory(current, root) command argument state vector save area offset execution time (for scheduling) signal parent process id pointer to proc table entry others

Page 53: 제 2 장 프로세스 개념 및 관리

Page 53컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT

fork system call : 프로세스 생성 시스템 호출 프로세스 개수를 증가시킬 수 있는 유일한 방법 create a copy of itself All environments (u block) are shared (exact copy)

process id 만 다름 process 간에 메모리 공유하지 않음 ( 단지 생성시의 모든 정보 상속 )

fork 수행과정 새로운 프로세스를 위해 프로세스 테이블항을 할당 자식 프로세스에게 고유의 ID 번호 부여 부모 프로세스의 내용 복사 프로세스와 관련된 자원들 ( 파일 테이블 ,inode 테이블 등 ) 의 이용 카운터 증가 부모 프로세스에게는 자식의 ID 번호를 return, 자식 프로세스에게는 0 을 return

Page 54: 제 2 장 프로세스 개념 및 관리

Page 54컴퓨터공학과 운영체제

fork 를 사용한 프로세스 생성

Page 55: 제 2 장 프로세스 개념 및 관리

Page 55컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENTmain(){ int pid; printf("Just one process so far\n"); printf("Calling fork …\n"); pid = fork(); if(pid == 0) printf("I'm the child \n "); else if (pid > 0) printf("I'm the parent, child has pid %d \n ", pid); else printf("Fork returned error code, no child \n "); }

Page 56: 제 2 장 프로세스 개념 및 관리

Page 56컴퓨터공학과 운영체제

fork 에 의한 프로세스 생성int a = 3; int main() { int pid; : do something; if ((pid = fork()) == 0) { //child a = 4; // child’s variable a printf ("child's a = %d\n", a); exit(0); // child 종료 } else // end of child { // parent a = 5; // parent’s variable a printf ("parent's a = %d\n", a); wait(); // parent 는 child 의 exit 까지 대기 } do something; }

Page 57: 제 2 장 프로세스 개념 및 관리

Page 57컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT exec system call

text & data segments 를 새로운 것으로 교체 즉 프로그램을 다른 것으로 교체하는 효과

exec does not change process but execute different code goto 와 유사

디스크의 프로그램을 새로운 프로세스로 생성하기 위해 fork + exec 를 사용

다른 운영체제에서는 fork 와 exec 의 기능을 합한 시스템 호출을 제공함

Page 58: 제 2 장 프로세스 개념 및 관리

Page 58컴퓨터공학과 운영체제

exec 계열을 사용한 프로세스 생성

Page 59: 제 2 장 프로세스 개념 및 관리

Page 59컴퓨터공학과 운영체제

#include <unistd.h>

int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); arg path 나 file 로 지정한 실행 파일을 실행할 때 필요한 명령어

라인의 옵션과 인자이다 . 한 개 이상을 지정할 수 있으며 마지막 인자는 반드시 NULL 포인터로 지정해야 한다 .

argv arg 와 같은 의미를 가지나 문자형 포인터의 배열로 형태가 다르다 . 배열의 마지막은 NULL 문자열로 끝나야 한다 .

Page 60: 제 2 장 프로세스 개념 및 관리

Page 60컴퓨터공학과 운영체제

exec 계열의 함수는 지정한 실행 파일로부터 프로세스를 생성한다 . fork 는 실행 중인 프로세스로부터 새로운 프로세스를 생성한다 .

exec 계열 함수의 사용 예 셸 프롬프트 상에서 “ ls”를 실행하는 것과 비교

$ ls -l apple/ ... execlp("ls", "ls", "-l", "apple/", (char *)0);

main 함수의 *argv[] 에 저장되는 문자열들과 같다 .

프로세스를 생성하기 위해 선택된 실행 파일의 이름이다 .

Page 61: 제 2 장 프로세스 개념 및 관리

Page 61컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT/* run ls in a subprocess */main(){ int pid; pid = fork();

if (pid > 0) { wait((int *) 0); printf("ls completed \n "); exit(0); } if (pid == 0) { execl("/bin/ls", "ls", "-l", (char *)0); perror("execl failed"); exit(1); } perror ("fork failed");}

exec 호출이 성공하면 실행되지 않는다 .

Page 62: 제 2 장 프로세스 개념 및 관리

Page 62컴퓨터공학과 운영체제

UNIX 계열 프로세스 tree

init

getty getty getty getty

login

shell a.out

fork,exec

exec

execfork + exec

exitwait

Page 63: 제 2 장 프로세스 개념 및 관리

Page 63컴퓨터공학과 운영체제

축약된 shell 의 코드

while (!logout) {

print prompt sign; accept command line string; parse the command line; // 이때 command 는 “ a.out" 또는 // “a.out&” 이라 가정 if ((pid = fork()) == 0) { // child shell execve ("a.out",,,); } // parent shell if (foreground) while (pid != wait()); }

Page 64: 제 2 장 프로세스 개념 및 관리

Page 64컴퓨터공학과 운영체제

UNIX PROCESS MANAGEMENT PROCESS 종료

"exit" system call : 자발적 종료 "signal" 이 용 (user kills, quit, break 등 ...) :

비자발적 종료

swappable image(text, data segment, u) 는 즉시 반납

proc table entry 는 존재 → "zombie" 상태

parent 가 wait 중이면 parent 에게 signal 이 감

추 후 parent 가 wakeup, run 하 면 종 료 된 child 의 proc table entry 를 제거해줌

Page 65: 제 2 장 프로세스 개념 및 관리

Page 65컴퓨터공학과 운영체제

시스템 호출 , 문맥 교환 및 인터럽트 처리 예제

사용자 프로세스가 디스크 입력을 위한 read 시스템 호출을 하여 완료될 때까지의 과정

시스템 호출 처리 대기에 의한 문맥 교환 인터럽트에 의한 디스크 입출력의 처리

Page 66: 제 2 장 프로세스 개념 및 관리

Page 66컴퓨터공학과 운영체제

사용자 프로세스

int main () { int fd; char buf[100];

do something; fd = open ("my_file", 0);

n = read (fd, buf, 100); // 사용자모드에서 실행 중 // 시스템 호출을 하여 커널로 // 진입하며 커널 모드 실행으로 전환 // 복귀 시는 다시 사용자 모드임 : }

Page 67: 제 2 장 프로세스 개념 및 관리

Page 67컴퓨터공학과 운영체제

시스템 호출 처리 루틴 (1)

int sys_read (,,,) { // 커널 모드 실행으로 전환된다 파일의 현재 논리적 접근 위치를 디스크 블록 번호로 변환한다 ; 원하는 디스크 블록이 커널의 버퍼 캐시에 있는 지 검색한다 ; if (버퍼 캐시에 있으면 ) { 100 byte 만큼 커널 버퍼의 자료를 사용자 영역으로 복사한다 ; ret_from_sys-call; // 사용자 모드로 복귀한다 . } // 버퍼 캐시에 없으므로 디스크 입력이 필요한 경우이다 . // 유니스 / 리눅스 계열에서 아래 부분은 bread 함수에 의해 실행된다 . 디스크 I/O 요청 블록을 생성한다 ; 디스크 I/O 요청 블록을 disk I/O 큐에 삽입한다 ;

Page 68: 제 2 장 프로세스 개념 및 관리

Page 68컴퓨터공학과 운영체제

시스템 호출 처리 루틴 (2)

if ( 현 disk I/O 요청 블록이 큐에서 첫 번째이면 ) {               // 현재까지 디스크 제어기가 쉬는 상태였음 디스크 제어기에 I/O 명령을 내려 작동을 지시한다 .; }     // 이 시점에서 프로세스가 요청한 디스크 I/O 는    // 큐의 첫 번째에 삽입되어 시작되었을 수도 있고 ,    // 큐의 뒷부분에 삽입되어 ( 즉 다른 디스크 I/O 가 이미 진행 중 )    // 입출력을 시작하지 못한 경우도 있다 .

// 두 경우 모두 디스크 I/O 가 완료될 때까지 프로세스는    // 중앙 처리기를 반납하고 대기 상태로 진입하여야 한다 .

      sleep_on ( 디스크 입출력 완료 ); // 디스크 입출력 완료까지                                         // 대기 상태로 진입

Page 69: 제 2 장 프로세스 개념 및 관리

Page 69컴퓨터공학과 운영체제

시스템 호출 처리 루틴 (3)

// 대기 상태에서 깨어나면 디스크 I/O 는 완료된 상태이고 ,   // 이 프로세스는 준비 상태를 거쳐 이미 커널 모드 실행 상태로    // 전환된 것이다 .

   I/O 가 수행된 버퍼 캐시에서 사용자 영역으로 자료를 복사한다 ; 사용자 모드로 복귀 ; // 이 때 복귀 과정에서 스케줄링 필요한 경우 스케줄러가 작동된다 . }

Page 70: 제 2 장 프로세스 개념 및 관리

Page 70컴퓨터공학과 운영체제

커널 내부 함수 sleep_on

int sleep_on (event_name) { 현 프로세스 PCB 의 상태 정보 = BLOCKED; 현 프로세스 PCB 를 준비 리스트에서 삭제한다 ; 현 프로세스 PCB 를 사건 (event) 종류별 대기 큐에 삽입한다 ; 준비 리스트에서 우선순위가 가장 높은 PCB 를 선정한다 ;

// 현 프로세스의 PCB 를 old_PCB, // 준비 리스트에서 새로 선정한 PCB 를 new_PCB 라 하자 .

context_switch ( old_PCB, new_PCB ); // context_switch 에서 새로운 프로세스로 jump 가 일어나고 , // 후에 이 지점으로 복귀되었을 때는 이미 준비 (ready) 상태를 // 거쳐 실행 (kernel-mode running) 상태로 된 것임 . return; }

Page 71: 제 2 장 프로세스 개념 및 관리

Page 71컴퓨터공학과 운영체제

디스크 인터럽트 처리기int disk_intr_handler (,,) { // 입출력 완료 인터럽트라 가정한다 . // 디스크 입출력 큐의 가장 앞 ( 프론트 ) 에 있는 입출력 요구가 수행 완료된 것이다 .

디스크 입출력 대기 큐 프론트의 입출력 정보 블록을 제거한다 ; 입출력을 요구한 프로세스의 PCB 를 대기 큐에서 제거하여 , 준비 리스트 (ready list)

에 삽입 ; // 대기 큐에서 제거하고 준비 리스트에 삽입하는 것은 // 사건을 기다리던 프로세스를 깨운다는 뜻으로 // wakeup_process(event) 라 표시할 수 있다 .

디스크 입출력 대기 큐의 다음 요구 블록의 입출력 정보로 , 디스크 제어기에 명령을 내려 다음 입출력을 시작시킨다 . 사용자 모드로 복귀 ; // 복귀 과정에서 스케줄러가 동작된다 . }