Download presentation
Presentation is loading. Please wait.
Published byShona Clarke Modified over 8 years ago
1
6.5 프로세스 주소공간의 취급 – 여러 시스템 콜이 프로세스의 주소공간을 조작 즉, 프로세스의 주소공간을 구성하는 region 을 조작 –Region table 의 내용 region 에 수록된 내용을 저장한 file 의 inode region type(test,shared,memory,private data, 또는 stack) region 의 크기 Physical memory 내 region 의 위치 region 의 상태 (locked, in demand, 현재 load 중 등 ) Reference count
2
작업 예 Exec system call: user 의 주소공간을 executable file 로 overlay –Old region 을 detach – 이들이 share 되지 않으면 반납 – 새 region 을 할당 – 이들을 attach 한 후 file 내용을 load 함. Region 의 lock, unlock – 할당된 region 을 조작 시 lock 하여 다른 process 들의 접근금지 ( 후에 unlock)
3
Region 의 할당 –Fork, exec 및 shmget (shared memory) 시 스템 콜 수행중 새 region 을 할당 – 커널은 region table 가지며, 각 항은 free linked list 나 active linked list 에 들어 있음 – 대개 각 process 는 이미 수행된 exec call 에 의해 executable file 과 연결되어 있음. allocreg 는 region table 의 inode field 를 executable file 의 inode 를 가리키게 함 그림 6.18
4
algorithm allocreg /*allocate a region data structure */ input: (1) inode pointer (2) region type output: locked region { remove region from linked list of free regions; assign region type; assign region inode pointer; if(inode pointer not null) increment inode reference count; place region on linked list of active regions; return(locked region); } 그림 6.18 영역을 할당하는 알고리즘
5
Region 을 Process 에 attach – 커널은 fork, exec 및 shmat 시스템 콜시 region 을 attach 함 ( 프로세스의 주소공간에 연결 ) –Region 은 서로 할당된 region 또는 다른 프 로세스들과 share 할 기존 region 일수도 있 음 그림 6.19 그림 6.20
6
algorithm attachreg /*attach a region to a process */ input: (1) pointer to (locked) region being attached (2) process to which region is being attached (3) virtual address in process where region will be attached (4) region type output : per process region table entry { allocate per process region table entry for process; initialize per process region table entry: set pointer to region being attached; set type field; set virtual address field; check legality of virtual address, region size; increment region reference count; increment process size according to attached region; initialize new hardware register triple for process; return(per process region table entry); } 그림 6.19 attachreg 알고리즘
7
empty 846K 752K 341K 484K 976K 342K 779K Page Table Addr Page Virt Addr Size and Protect 09 Entry for Text 그림 6.20 기존 텍스트 영역에 부착하는 예
8
Region 크기의 변경 –Sbrk 시스템 콜을 사용하여 가상기억 공산을 확장 또는 축소 가능 – 또한 프로세스의 스택은 자동적으로 확장함 – 커널은 region 크기의 변경을 위해 “ growreg ” 를 호출 – 커널은 region 을 증가시키기 위해서 growreg 를 호출 못함 – 기존 region 에 대해 growreg 을 사용하는 2 경우 프로세스의 data region 에 대한 추가 User stack 의 자동 증가
9
– Text region 과 shared memory region 을 일 단 초기화 되면 증가 불가 – 커널은 이어 page table 을 할당 ( 또는 기존 page table 을 확장 ) 받고, demand paging 을 쓰지 않을 경우는 메모리는 할당 – 메모리를 할당받을 경우는 growreg 를 호출 하기 전에 미리 메모리가 남아 있는지 확인 그림 6.21 그림 6.22
10
algorithm growreg /*change the size of a region */ input : (1) pointer to per process region table entry (2) change in size of region (may be positive or negative) output : none {if (region size increasing) { check legality of new region size; allocate auxiliary tables (page tables); if (not system supporting demand paging) { allocate physical memory; initialize auxiliary tables, as necessary; } }else{ free physical memory, as appropriate; free auxiliary tables, as appropriate; } do (other) initialization of auxiliary tables, as necessary; set size field in process table; } 그림 6.21 growreg 알고리즘
11
Page Table Addr Proc Virt Addr Size and Protect 128K6K Entry for Stack Page Table Addr Proc Virt Addr Size and Protect 128K7K Entry for Stack 342K 779K 846K 752K 341K 484K 342K 779K 846K 752K 341K 484K 976K NEW PAGE Per Process Region Table Before Stack Growth After Stack Growth 그림 6.22 스택 영역을 1K 바이트 성장 시킴
12
Region 의 loading –Demand paging 을 사용할 경우는 exec 시 스템 호출시 file 을 process 의 주소공간으로 map 하고, physical page 는 후에 읽어들임. – 아니면 executable file 을 executable file 에 지정된 프로세스 region 의 가상 주소공간에 load 해야 함 – 그림 6.23, 그림 6.24 Region 의 반납 그림 6.25
13
algorithm loadreg /*load a portion of a file into a region*/ { increase region size according to eventual size of region (algorithm growreg); mark region state : being loaded into memory; unlock region; set up u area parameters for reading file: target virtual address where data is read to, start offset value for reading file, count of bytes to read from file; read file into region(internal variant of read algorithm); lock region; mark region state: completetly loaded into memory; awaken all processes waiting for region to be loaded; } 그림 6.23 Loadreg 알고리즘
14
Per Process Region Table (b) After First Growreg Page Table with One Entry for Gap Page Table Addr Page Virt Addr Size and Protect --- 0 Text (a) Original Region Entry Page Table Addr Page Virt Addr Size and Protect 08 Text (c) After 2nd Growreg Page Table Addr Page Virt Addr Size and Protect 01 Text empty 779K 846K 752K 341K 484K 976K 794K Per Process Region Table 그림 6.24 하나의 텍스트 영역을 적재
15
algorithm freereg /*free an allocated region */ input : pointer to a (locaked region) output : none {if(region reference count non zero) { /*some process still using region */ release region lock; if(region has an associated inode) release inode lock; return; } if(region has associated inode) release inode (algorithm iput); free physical memory still associated with region; free auxiliary tables associated with region; clear region fields; place region on region free list; unlock region; } 그림 6.25 detachreg 알고리즘
16
프로세스로 부터 Region 을 분리 –Exec, exit, shmdt(detach shared memor) – 시스템 호출에서 region 을 detach. Region 의 복사 –Fork system call 시 process 의 region 을 복 사함을 필요로 함 그림 6.27 그림 6.28
17
algorithm detachreg /* detach a regionfrom a process */ input : pointer to per process region table entry output : none { get auxiliary memory management tables for process, release as appropriate; decrement process size; decrement region reference count; if(region reference count is 0 and region not sticky bit) free region(algorithm freereg); else /*either reference count non-0 or region sticky bit on */ { free inode lock, if applicable (inode associated with region); free region lock; } 그림 6.26 detachreg 알고리즘
18
Text Data Stack Per Process Region Tables Text Data Stack Shared Private Regions Proc A Proc B Data Copy 그림 6.27 한 영역의 복사
19
algorithm dupreg /*duplicate an existing region */ input : pointer to region table entry output : pointer to a region that looks identical to input region { if(region type shared) /*caller will increment region reference count * with subsequent attachreg call */ return (input region pointer) allocate new region (algorithm allocreg); set up auxiliary memory management structures, as currently exists in input region; allocate physical memory for region contents; "copy" region cotents form input region to newly allocated region; return(pointer to allocated region); } 그림 6.28 dupreg 알고리즘
20
6.6 Sleep –Sleep 는 프로세스 상태를 kernel running 에서 asleep in memory 로 변환 –Wakeup 은 asleep 에서 ready to run –Sleep 시는 먼저 process 가 trap 을 수행하여 kernel 로 들어가서, 이어 resource 등을 기다리며 sleep 함 Sleep event 및 address –Process 는 event 의 발생을 기다리며 sleep 하고, 이 때는 각 event 를 kernel 의 virtual address 로 map –Event 가 발생하면, 한 event 를 기다리는 모든 process 들이 wakeup – 여러 event 가 하나의 주소로 map 될 경우도 이들이 모두 wakeup
21
Kernel Context Layer 2 Execute code for Context Switch Save Register Context of Sys Call Kernel context Layer 1 Execute Sys Call Save Register Context User Level Executing User Mode Invoke Sleep Algorithm …… Make System Call …… 그림 6.29 sleep 하는 프로세스의 전형적인 문맥 충돌
22
proc a proc b proc c proc d proc e proc f proc g proc h awaiting I/O completion waiting for buffer waiting for terminal input addr A addr B addr C 그림 6.30 사건들을 기다리며 수면 상태에 있는 프로세스들과 주소 공간에의 사건들의 매핑
23
Sleep 와 Wakeup 알고리즘 그림 6.31 그림 6.32 –Process 가 때로는 일어나지 않을 event 를 기다리는 수도 있음. 이때는 어떻게 control 을 다시 얻느냐 ? – 이 경우는 kernel 이 sleeping process 를 곧 바로 interrupt 함.(signal 을 보냄 ) – 예 : 한 process 가 terminal 로 부터 읽으라는 read system call 을 수행하고, 자리를 떠나 버린 후, 다른 user 가 terminal 을 turn off
24
algorithm sleep input: (1) sleep address (2) priority output: 1 if process awakened as a result of a signal that process catches, longjump algorithm if process awakened as a result of a signal that it does not catch, 0 othrerwise; {raise processor execution level to block all interrupts; set process state to sleep; put process on sleep hash queue, based on sleep address; save sleep address in process table slot; set process priority level to input priority; if( process sleep is NOT interruptible) { do context switch; /*process resumes execution here when it wakes up */ reset processor priority level to allow interrupts as when process went to sleep; return(0); } 그림 6.31 sleep 알고리즘
25
/*here, process sleep is interruptible by signals */ if (no signal pending against process) { do context switch; /*process resumes execution here when it wakes up */ if(no signal pending against process) { reset processor priority level to what is was when process went to sleep; return(0); } remove process form sleep hash queue, if still there; reset processor priority level to what it was when process went to sleep; if(process sleep priority set to catch signals) return(1) do lognjmp algorithm; }
26
algorithm wakeup input : sleep address ouput: none {raise processor execution level to block all interrupts; find sleep hash queue for sleep address; for(every process asleep on sleep address) { remove process form hash queue; mark process state "ready to run"; put process on scheduler list of processes ready to run; clear field in process table entry for sleep address; if(process not loaded in memory) wake up swapper process(0); else if (awakened process is more elligible to run than currently runnign process) set scheduler flag; } restore processor execution level to original level; } 그림 6.32 wakeup 알고리즘
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.