프로세스 (Process) (1) Chapter #5
Process 정의 Process 구조 Process Context Process Scheduling 강의목차 Unix System Programming 2
Program( 프로그램 ) Process 정의 (1) 기계어명령어와데이터를모아놓은실행파일 C 언어등프로그램언어로작성된소스파일을컴파일링하여생성 COFF(Common Object File Format) 등의형식으로저장 UNIX에서는파일접근모드가실행가능으로설정되어있어야하며, 주로보조기억장치에저장되어있음 Program 자체만으로실행가능한가? Unix System Programming 3
Process( 프로세스 ) Process 정의 (2) 수행중인프로그램 (an instance of a running program) 프로그램의수행환경 (an execution environment of a program) 스케줄링단위 (scheduling entity) 제어흐름과주소공간의집합 (a control flow and address space) Multitasking을지원하는객체 Task( 태스크 ) in Linux A process needs certain resources, including CPU time, memory, files, and I/O devices, to accomplish its task. (by Silberschatz) Unix System Programming 4
Program vs. Process Process 정의 (3) program loading Unix System Programming 5
Process 정의 (4) 사용자프로세스 & 커널프로세스 하나의응용프로그램실행과정은응용프로그램실행과커널함수실행으로이루어진다 사용자프로세스 응용프로그램의실행객체 커널프로세스 커널프로그램의실행객체 응용프로그램의실행은사용자프로세스와커널프로세스사이의전환실행으로이루어진다 Unix System Programming 6
Process 정의 (5) 층, 프로세스, 링크, 레벨의관계 Unix System Programming 7
Process 구조 Process 구조 (1) 실제프로그램이기억공간에로딩되어구성되는프로세스이미지 텍스트, 데이터, 스택, 힙영역으로구성 프로세스생성및관리와관련된커널데이터구조 : (1) 프로세스테이블 (2) PCB( 프로세스제어블록 ) (3) 사용자영역 (u-area) 파일디스크립터테이블, OS 스택등 Unix System Programming 8
Process 구조 (2) Process 구조 ( 계속 ) Unix System Programming 9
Process 이미지구조 Process 구조 (3) 텍스트, 데이터, 스택, 힙영역으로구성 텍스트 (text) 영역 프로그램코드부분 (assembly 언어 ) 프로그램순서에따라메모리상위번지로자람 데이터 (data) 영역 전역변수 초기화된부분과초기화되지않은부분을별도로관리 스택 (stack) 영역 지역변수, 인자, 복귀주소 함수호출순서에따라동적으로메모리하위번지로자람 힙 (heap) 영역 malloc(), calloc() 등의인터페이스로동적할당되는부분 Unix System Programming 10
Process 구조 (4) Process 이미지구조 ( 계속 ) Unix System Programming 11
Process 이미지구조 ( 계속 ) 함수호출시의스택구조 Process 구조 (5) int func2(int x, int y) { int f2_local1 = 21, f2_local2 = 22; int *pointer, i;... } void func1(){ int ret_val; int f1_local1 = 11, f1_local2 = 12;... ret_val = func2(111, 112);... } int main(){... func1();... } Unix System Programming 12
Process 구조 (6) User Stack vs. Kernel Stack 사용자스택 사용자함수호출에필요한여러가지요소들을저장 지역변수들 (local variables) 이전스택프레임에대한포인터 ( 주소 ) 함수호출수행후의리턴주소 함수호출에사용한인자들 (parameters) 커널스택 시스템호출에필요한여러가지요소들을저장 내용은사용자스택과유사 Unix System Programming 13
Process 구조 (7) 프로세스이미지에대한텍스트 (etext), 데이터 (edata), 스택및사용자영역의한계점 (end point) 을출력하여프로세스이미지구조를이해 #define PRADDR(X) printf(" X at 0x%x and value = 0x%x\n",&X,X) extern etext, edata, end; static char s = 'S'; int a,b = 1; int main(int argc,char *argv[]) { void sub1(); static int c, d =1; char m,n = 'n'; printf("main at 0x%x and sub1 at 0x%x\n",main,sub1); printf("end of text segment at 0x%x\n",&etext); PRADDR(s); PRADDR(b); PRADDR(c); PRADDR(d); Unix System Programming 14
Process 구조 (8) printf("end of statics & initialized externals at 0x%x\n", &edata); PRADDR(a); printf("end of uninitialized externals at 0x%x\n", &end); } PRADDR(m); PRADDR(n); PRADDR(argc); PRADDR(argv); for(b = 0; b<argc; b++) printf("argv[%d] at 0x%x and value = 0x%x or %s\n", b, &argv[b], argv[b], argv[b]); sub1(c); return 0; void sub1(int p) { static int t; char v; } PRADDR(t); PRADDR(p); PRADDR(v); Unix System Programming 15
Process 구조 (9) 프로세스의크기변경 : brk, sbrk Unix System Programming 16
Process 구조 (10) 프로세스의크기변경 ( 계속 ) Unix System Programming 17
Process 구조 (11) brk 와 sbrk 시스템호출을이용하여수행중인프로세스의크기를설정하고출력하는프로그램을작성하라. extern int etext, edata, end; int main(void) { int brk(), ret; char *sbrk(), *bv; system("clear"); printf("the program text ends at %08x\n", &etext); printf("the initialized data ends at %08x\n", &edata); printf("the uninitialized data ends at %08x\n", &end); bv = sbrk(0); printf("current break value is %%08x\n\n",bv); ret = brk(bv+512); /* 01000 */ printf("brk returned.... %d\n",ret); bv = sbrk(0); printf("current break value is %08x\n\n",bv); Unix System Programming 18
Process 구조 (12) ret = brk(&ret); printf("brk returned.... %d\n",ret); bv = sbrk(0); printf("current break value is %08x\n\n",bv); bv = sbrk(64); /* 0100 */ printf("sbrk returned %08x\n",bv); bv = sbrk(0); printf("current break value is %08x\n\n",bv); bv = sbrk(-1024); /* memory deallocation: -02000 */ printf("sbrk returned %08x\n",bv); printf("current break value is %08x\n\n",bv); } return 0; Unix System Programming 19
Process Context (1) 프로세스문맥 (Process Context) 커널이관리하는프로세스자원과제어흐름의집합 다음과같은 3 부분으로구성 시스템문맥 (System Context) 메모리문맥 (Memory Context) 하드웨어문맥 (Hardware Context) 프로세스실행이전환될때에문맥교환 (Context Switching) 이일어난다 프로세스스케줄링 시스템호출 (Trip) 인터럽트처리 Unix System Programming 20
프로세스문맥구조 Process Context (2) Unix System Programming 21
시스템문맥 Process Context (3) 프로세스를관리하는정보집합 태스크정보 : pid, uid, euid, suid, 태스크상태 : 실행상태, READY 상태, 수면상태, 태스크의가족관계 : p_pptr, p_cptr, next_task, next_run 스케줄링정보 : policy, priority, counter, rt_priority, need_resched 태스크의메모리정보 : 세그먼트, 페이지 태스크가접근한파일정보 : file descriptor 시그널정보 쓰레드정보 그외 : 수행시간정보, 수행파일이름, 등등 (kernel dependent) Unix System Programming 22
Process Context (4) 시스템문맥 ( 계속 ) task_struct 자료구조 /* include/linux/sched.h*/ task identification : pid, pgrg, session, uid, euid, suid, fsuid state : TASK_RUNNING, TASK_ZOMBIE, ASK_INTERRUPTABLE, TASK_UNINTERRUPTABLE, TASK_STOPPED task relationship : p_pptr, p_cptr, next_task, next_run scheduling information : policy, priority, counter, rt_priority, need_resched memory information : mm_struct signal information : signal_struct, sigpending, signal, blocked file information : files_struct, fs_struct thread information : tss time information : start_time, times, timer_list executable format : personality, exec_domain resource limits : rlim miscellaneous : flag, comm, maj_flt, min_flt, exit_code 등 Unix System Programming 23
Process Context (5) 시스템문맥 ( 계속 ) task_struct 자료구조 Unix System Programming 24
Process Context (6) 시스템문맥 ( 계속 ) PCB(Process Control Block) in Unix Process state Program counter CPU registers CPU scheduling information Memory-management information Accounting information I/O status information Unix System Programming 25
Process Context (7) 시스템문맥 ( 계속 ) PCB Management in Unix Unix System Programming 26
메모리문맥 Process Context (8) fork internal : after loading (after run a.out) & before fork Unix System Programming 27
Process Context (9) 메모리문맥 ( 계속 ) fork internal : after fork Unix System Programming 28
하드웨어문맥 Process Context (10) CPU 레지스터집합 - CPU 내에서의현재프로그램의실행상태를의미 예 : 80x86 Architecture Unix System Programming 29
Process Context (11) 하드웨어문맥 ( 계속 ) 문맥교환과정 Unix System Programming 30
Process Context (12) 하드웨어문맥 ( 계속 ) 문맥교환제어흐름 Unix System Programming 31
Process Scheduling (1) 프로세스상태 (Process State) 프로세스는여러가지상태간의변환을거치면서실행된다 프로세스상태 생성 (Initial) 상태 fork() 시스템호출로프로세스가생성된상태 준비 (Ready) 상태 CPU 를할당받기위한대기상태 실행 (Running) 상태 CPU 에서실행중인상태 휴면 (Sleep) 상태 입출력이종료될때까지대기중인상태 좀비 (Zombie) 상태 exit() 시스템호출에의해종료된상태 정지된준비 (Suspended Ready) 상태 스왑영역에서의실행준비상태 정지된휴면 (Suspended Ready) 상태 스왑영역에서의휴면상태 Unix System Programming 32
Process Scheduling (2) 프로세스상태전환 (Process State Transition) Unix System Programming 33
실행상태구분 Process Scheduling (3) 사용자수준실행 / 커널수준실행 Unix System Programming 34
Process Scheduling (4) 사용자모드 / 시스템모드 사용자가작성한프로그램은 user mode 에서수행됨 system call 나 Interrupt 는 system mode 에서수행 한프로세스가 user mode와 system mode에서동시에수행될수는없음 system mode에서는 kernel stack을사용 Unix System Programming 35
Process Scheduling (5) 프로세스스케줄링 스케줄링 자원을특정객체가사용할수있도록할당하는것 프로세스스케줄링에서는 CPU 가자원이되고, 프로세스가객체가된다 프로세스스케줄링목표 CPU Utilization 극대화 CPU cycle 의효율적인배치 프로세스스케줄링유형 선점형스케줄링 (Preemptive Scheduling) 비선정형스케줄링 (Non preemptive Scheduling) Unix System Programming 36
Process Scheduling (6) 프로세스스케줄러 (Dispatcher) 주요동작 Ready Queue 에서다음에실행할프로세스선택 선택된프로세스에 CPU 를할당 스케줄링수행시점 1. Switches from running to waiting state 2. Switches from running to ready state 3. Switches from waiting to ready 4. Terminates Unix System Programming 37
Process Scheduling (7) 프로세스스케줄링기준 공평성 (fairness) : 기아상태 (starvation) 가되는태스크가없어야된다. 효율성 (efficiency) : 태스크선택과정이빠르게수행되어야한다. 응답시간 (response time) vs 처리율 (throughput) Unix System Programming 38
Process Scheduling (8) 프로세스스케줄링알고리즘 FCFS (First Come First Service) 라운드 - 로빈 (Round-Robin) SJF (Short Job First) 다단계피드백큐 (Multilevel Feedback Queue) EDF (Earliest Deadline First) RM (Rate Monotonic) Fair Queuing(Process group이scheduling 단위 ) Gang Scheduling(Synchronization 필요한 Process group이단위 ) Scheduling for Clustering System Process Migration Unix System Programming 39
Process Scheduling (9) Unix 프로세스스케줄링 Mutilevel Feedback Queue Interactive process 의효과적인처리가능 Unix System Programming 40
Process Scheduling (10) UNIX 프로세스스케줄링철학 프로세스마다 scheduling priority 갖는다 특정프로세스가 CPU 를독점하는것을방지 특정프로세스가기아상태에빠지는것을방지 프로세스가자발적으로 CPU를반납할수도있음 (sleep 상태로전이 ) Event가발생하면 wakeup 되어다시 ready queue로들어감 CPU를사용한프로세스는 aging에의해 sleep 상태에있었던프로세스에비해 scheduling priority가낮아진다 Unix System Programming 41
Process 트리구조 (1) Unix 프로세스의생성 fork() & exec() 시스템호출 fork() 시스템호출 프로세스복제 exec() 시스템호출 프로세스변신 프로세스복제에의해부모-자식관계성립 fork() 시스템호출을호출한프로세스 부모프로세스 fork() 시스템호출에의해복제된프로세스 - 자식프로세스 Unix System Programming 42
Process 트리구조 (2) Unix 프로세스계층구조 Unix 시스템은부모-자식관계에기반하여모든프로세스를트리구조로형성하여관리한다 Process #0 스와퍼 ( 스케줄러 ) 프로세스 Process #1 init 프로세스 ( 모든프로세스의선조프로세스 ) # pstree p more Unix System Programming 43
Process 트리구조 (3) Unix 프로세스계층구조 Unix System Programming 44