Embed
Email

process

Document Sample
process
Description

process

Shared by: yagnesh darji
Categories
Tags
Stats
views:
199
posted:
9/3/2009
language:
English
pages:
62
Unix-v5 Process Structure



9/3/2009



Mohamed M Khalil, Ph.D.



1



Process Definition



• A process is an entity which is created by the operating system and consists of a sequence of bytes which is interpreted by the CPU as 1. Machine instruction. 2. Data 3. Stack.



Many processes appear to execute simultaneously as the kernel schedules them for execution and several processes may be an instance of one program. In UNIX fork is used to create a process.



9/3/2009



Mohamed M Khalil, Ph.D.



2



Process State Transition Diagram

Interrupt, interrupt return

exit



Sys call, interrupt



User running return Return to user preempted



Zombie



Kernel Running



preempt Reschedule Process



sleep Sleep, memory



wakeup



Ready run, memory Swap In Enough memory fork Swap out created



Swap out wakeup



Sleep, swapped



Ready run, swapped



9/3/2009



Mohamed M Khalil, Ph.D.



3



Process State Transition Diagram

• • • • • • • Created : parent execute system call. Ready run, memory: move from created when enough memory. Ready run, no memory: move from created when no memory. Kernel Running: process is syscall or it is interrupted. Sleep, memory: process is waiting for completion of I/O. Sleep, swapped: process is swapped for lack of memory while waiting or I/O completion. User Running: user process is executing user’s code.









Ready run, swapped: process is ready to run (e.g. when I/O completes) while it is swapped.

Preempted: the process is returning from kernel to user mode, but the kernel preempts it and does a context switching to schedule another process



9/3/2009



Mohamed M Khalil, Ph.D.



4



Process Structure



text Data Stack



Process consists of 3 regions. Region is a contagious area of the virtual address space

9/3/2009 Mohamed M Khalil, Ph.D. 5



User Area - U

Process A



text

Physical memory U Area



Data Stack

Process B



Same virtual address



text

Physical memory U Area



Data Stack



•Each process has a user area. • User area (U) has a fixed virtual address; it is mapped to different physical address.



•Each user area is mapped to a physical memory when process is loaded to memory.



9/3/2009



Mohamed M Khalil, Ph.D.



6



Data structure for a process

Per process region table Region table



U Area

Process table



text data stack



memory

Per process region table allows independent processes to share regions.

9/3/2009 Mohamed M Khalil, Ph.D. 7



exec a process

U Area A

Process table Old process deallocate Region table Per process region table text data stack



text data stack



U Area B

File descriptor table 9/3/2009 Mohamed M Khalil, Ph.D.



memory

8



fork a process

U Area Parent

Region table Process table File descriptor table text data stack Per process region table text data stack



U Area Child

File descriptor table 9/3/2009 Mohamed M Khalil, Ph.D.



memory

9



create a thread

U Area A

File descriptor table text data stack



text Process table data stack Per process region table Region table



memory

9/3/2009 Mohamed M Khalil, Ph.D. 10



Paging memory layout



Page 0



Page 1



Page 2



Every memory location is addressed as



(page number, byte offset in page)

Memory management hardware divides physical memory into a set of equal sized pages (typical 512-4k bytes). Paging overcome fragmentation problem.



9/3/2009



Mohamed M Khalil, Ph.D.



11



Page table

87k 552k 727k 941k 1096k 2001k



Page table

Page n Page n+1 Page n+2



Memory



Page table maps virtual address into physical address. Also, it contains access privileges.

9/3/2009 Mohamed M Khalil, Ph.D. 12



Process virtual space



text



0 1M 2M 4M



kernel user



data stack text



data

stack



Process virtual space is divided into two classes • Kernel space and associated kernel mode. • User space and associated user mode.



9/3/2009



Mohamed M Khalil, Ph.D.



13



Layout of the kernel

Page table address

text



Virtual address

0 1M 2M 4M



no of pages



kernel user



data stack text data stack



541k 783k 986k



87k 552k 727k 941k



empty 137k 852k 764k



0k 4k 17k



128kk 97k 135k 139k



256k 292k 304k 279k



•Kernel code & data resides in memory permanently, all processes shares it. •When executing in user mode you can’t execute kernel code.



•user accesses kernel mode through interrupts; changes mode from user to kernel.



9/3/2009



Mohamed M Khalil, Ph.D.



14



User Area

Per process Region table

text data stack 0 1M 2M 4M

Page table address Virtual address no of pages



text data



0 1M 2M



P A



U area



kernel



stack



text

data stack



U area

text



4K

4M



user



data stack



Page tables

text data 0 1M 2M 4M



114k 708k 143k 565k



87k 552k 727k 941k



P B



stack U area text data stack









Loader assign a U area at fixed virtual location.

The proper region user entry contents will be loaded to U area register at context switching. This region is accessed only at kernel mode.

9/3/2009 Mohamed M Khalil, Ph.D. 15



Region Entry Structure

The file will be loaded into the region



• locked



Inode pointer to the file

Size of the region status Count number of processes that reference the region



•In demand

•In the process of being loaded to memory •Loaded in to memory



9/3/2009



Mohamed M Khalil, Ph.D.



16



Region Table

Active list



free list



Region table is divided into:



•A linked list of active elements.

•A linked list of free elements.

9/3/2009 Mohamed M Khalil, Ph.D. 17



Operations on Region



•Lock and unlock

•Allocate region and free region. •Attach a region and detach a region. •Load a region from a file into memory space of a process •Duplicate a region.



9/3/2009



Mohamed M Khalil, Ph.D.



18



allocreg -allocate region



1. Allocate a new region during fork, exec, shmget (shared memory) system calls. 2. Remove a region entry from a free list and add it to the active list. 3. Mark the region to be shared (e.g. text) or private (e.g. stack). 4. Set the inode field in the region to the inode of executable file. 5. Increment the inode reference count to prevent other processes from removing its contents when unlinking it. 6. Return a locked region.



9/3/2009



Mohamed M Khalil, Ph.D.



19



allocreg-allocate region (continue)

locked region allocreg (inode pointer, region type) output locked region { remove region from linked list of free regions; assign the free region into active list and lock the region mark the region type to be shared or private. if (inode pointer is not null) increment inode reference count to prevent other processes from removing the inode when executes unlink. place region on linked list of active regions. return locked region } • •



allocreg is called by shmtget, fork and exec. In case of fork and exec the operation is associated with a file. The reference count for inode of this file must be incremented.



9/3/2009



Mohamed M Khalil, Ph.D.



20



Allocreg -allocate region (exec example)

Region table Active list free list Active list free list Allocate first free element in region table 2 Active list free list Set region to point to file inode Inode table 1



9/3/2009



Mohamed M Khalil, Ph.D.



21



attachreg -attach region



•Attach a region to a process during fork. Exec, and shmat system calls.



•It connects the region to the process address space. •Kernel allocate per process region entry for the new region. •Initialize its type to text, data, shared memory or stack. •The region’s virtual address space shouldn't overlap with other regions.



•The process virtual address space shouldn’t exceed the limits.

Region maximum space is 8M, we can’t attach 1 M region with a process of size 7.5 M. •Kernel increase size field in the process table with the region size.



•Kernel increase the reference count in the region table.

9/3/2009 Mohamed M Khalil, Ph.D. 22



attachreg -attach region



attachreg Input: 1 – pointer to locked region to be attached 2- process to which region is being attached 3- virtual address in process where region is 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. Increment region reference count. Increment process size according to growth region Return (per process region table entry) }



9/3/2009



Mohamed M Khalil, Ph.D.



23



attachreg -attach region (exec example)

process table



Region table Per process Region table



Allocate new text entry (1)



0



4



114k Allocate new page table 708k 143k 565k



Attach an existing shared text region of size 4 Kbytes to virtual address 0 of the process.

9/3/2009 Mohamed M Khalil, Ph.D. 24



growreg – grow the region size







Kernel invoke growreg to change the size of the region. 1. Process expands size by executing sbrk system call.



2. Stack expand explicitly according to the depth of nested procedure call.

• • The virtual space of the expanded region shouldn't overlap with others. The process size shouldn’t exceed the maximum size.







The shared region never increase in size if it is attached to other processes.



9/3/2009



Mohamed M Khalil, Ph.D.



25



growreg – grow the region size







In case of more memory required, kernel allocate new page table or expand existing page table. Allocate physical memory for pages on systems do not support demand pages. If the process contracts the region, the kernel simply release memory assigned to region. Adjust process size, region size, and per process region entry to reflect the new mapping.



• •



9/3/2009



Mohamed M Khalil, Ph.D.



26



growreg – grow the region size



growreg Input: 1 – pointer to per process region table 2- change in size region (+ or -) if (Region size is +) Check legality of new size Allocate page tables If (not system supporting demand paging) transfer pages; else free physical memory for pages. free page table entries Set size field in process table }



9/3/2009



Mohamed M Khalil, Ph.D.



27



growreg – grow the region size

Per process Region table Per process Region table



stack



128



4



stack



128



5



114k

708k 143k 565k New page



114k

708k 143k 565k 976k



9/3/2009



Mohamed M Khalil, Ph.D.



28



freereg – freeing a region



•The region will be freed when it is not attached to any process (ref count =0). •Free inode associated with region using iput. • free page map table entries and memory pages.



9/3/2009



Mohamed M Khalil, Ph.D.



29



freereg – free region



freereg Input: 1 – pointer to the locked region if (region reference count > 0) unlock region return release inode if it exists (iput) Free page table entries Free memory associated with pages Place region if region free list Unlock region }



9/3/2009



Mohamed M Khalil, Ph.D.



30



dupreg – duplicate a region





• •



fork requires the kernel to duplicate data and stack regions.

the region reference count is incremented in case of shared text & memory, allowing the parent & child processes to share regions. In case of stack & data regions are copied: 1. Allocate a new region entry. 2. Allocate page map table. 3. Allocate physical memory for the region.



9/3/2009



Mohamed M Khalil, Ph.D.



31



dupreg – duplicate region



dupreg Input: 1 – pointer to region table entry Output: a region which is identical to input region { if (region type shared) // caller will increment reference count with subsequent attachreg return input region pointer Allocate new region (allocreg) Allocate page map table and physical memory for pages. Copy contents from input region to output region Return pointer to allocated region }



9/3/2009



Mohamed M Khalil, Ph.D.



32



dupreg – duplicate a region

Per process Region table Text Data stack Process A Private data Shared text



Per process Region table Text Data stack Process B



Private stack



copy



Private data



Private stack



9/3/2009



Mohamed M Khalil, Ph.D.



33



loadreg – load region



• Allocate memory to load a file (growreg).

• Load a file on demand if on demand paging is supported. • Copy the file into memory if on demand not supported.



9/3/2009



Mohamed M Khalil, Ph.D.



34



loadreg – load region



loadreg Input: 1- pointer to per process region table entry 2- target virtual address to load region 3- inode pointer of file for loading region 4- byte offset in file for start of region 5- byte count for amount of data to load { increase region size to accommodate file size (growreg) 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 Awaken all processes waiting for region to be loaded }



9/3/2009



Mohamed M Khalil, Ph.D.



35



loadreg – load region



exec system calls load a text of size 7k into memory with a gap of 1K bytes in the beginning. The page containing address 0 will be protected such that access 0 will incur page fault and abort.



9/3/2009



Mohamed M Khalil, Ph.D.



36



loadreg – load region

Region table



Per process Region table

Page table addr Proc virtual address Size and protect



---------



0



1



2



• allocreg: allocate a region for the executable file.



• attachreg: attach the new region to the process.



9/3/2009



Mohamed M Khalil, Ph.D.



37



loadreg – load region

Region table



Per process Region table

Page table addr Proc virtual address Size and protect



0



1



empty



growreg: Allocate page map table of one empty entry. The size will be increased by one.



9/3/2009



Mohamed M Khalil, Ph.D.



38



loadreg – load region

Region table



Per process Region table

Page table addr Proc virtual address Size and protect



0



8



empty 708k 143k 565k 976k



loadreg:

• growreg: to allocate memory for the file to be loaded.



• Load the file to be executed.

9/3/2009 Mohamed M Khalil, Ph.D. 39



detachreg – detach region



• The kernel detaches regions in the exec, exit, and shmdt (detach shared memory).

• Decrement process size. • Decrement region reference count.. • Call free region to-free page map table, physical memory if necessary.



9/3/2009



Mohamed M Khalil, Ph.D.



40



detachreg – detach region



detachreg Input : pointer to per process region table. Output: none decrement process size; Decrement region reference count; release per process region table; if (region reference count is 0) free region (algorithm freereg);



9/3/2009



Mohamed M Khalil, Ph.D.



41



Process Control



9/3/2009



Mohamed M Khalil, Ph.D.



42



fork – system call



• • •



Process invoke fork() to create a new process. Process invoke fork () is a parent and new process is child process. pid = fork (); pid in the parent process is the child process ID, while pid in the child process is 0.



9/3/2009



Mohamed M Khalil, Ph.D.



43



fork – system call (continue)



The kernel do the following: • • • Allocate a new slot in the process table for child process. Assign a unique ID number for the child (Child ID). Make copy for the following: 1. User area (U area), this include copy of file descriptor table, and kernel stack. 2. Increment the reference counts in the file table and inode table for files associated with the process. 3. data area for parent.







Return the process id for the child process to parent otherwise return 0.



9/3/2009



Mohamed M Khalil, Ph.D.



44



Fork Creating a new process context

Parent Process

Parent data Parent user stack

Per process region table



U Area Open Files Current Directory Changed Directory Kernel Stack File Table text data stack



Shared Text



Child Process

Child data child user stack

Per process region table



U Area Open Files Current Directory Changed Directory Kernel Stack inode Table text data stack



9/3/2009



Mohamed M Khalil, Ph.D.



45



process group



Process group leader



A pid =555 gid =555



pid =456 gid =456 pid =666 gid =666



B



pid =123 gid =456



pid =777 gid =456



C



. The kernel uses a group id to identify the set of processes which receive common signal. If process A sends a signal kill (0,SIGINT), it will be caught by all processes which have the same gid number (e.g. B,C).



9/3/2009



Mohamed M Khalil, Ph.D.



46



set group id example

#include main (argc,argv){ int i; Setpgrp (); // set group id equal to process id For (i=0;i int fdrd, fdwt; char c; main (argc,argv){ int argc; char *argv []; fdrd = open (argv[1], O_RDONLY); fdwt = creat (argv[2],0666); fork (); rdwrt (); exit (0); } rdwrt (){ for (;;) { if (read (fdrd,&c,1) != 1) return; write (fdwt,&c,1); } }

9/3/2009 Mohamed M Khalil, Ph.D. 49



fork example (continue)



input : abcde



Output : abcde



9/3/2009



Mohamed M Khalil, Ph.D.



50



exit – system call

Process is terminated by executing exit system call. An exiting process will enter zombie state, relinquishes its resources, and dismantle its context except for its slot in the process table. • • • • terminates the calling process "immediately". Any open file descriptors belonging to the process are closed any children of the process are inherited by process 1, init, the process's par ent is sent a SIGCHLD signal. The value status is returned to the parent process as the process's exit status, and can be collected using one of the wait family of calls)



exit (status)

Where the value of status is returned to the parent process for examination. The exit might be called implicitly or explicitly.



9/3/2009



Mohamed M Khalil, Ph.D.



51



exit – system call

exit Input: return code for parent process Output: none { if (process is a group leader) send an hangup signal to all members of process group reset process group for all members to 0 close all open files (internal version of close) release current directory (iput) release current changed root, if exists (iput); free region; (freereg) make process state zombie; assign parent to all children processes to be init (PPID = 1); send death of child (SIGCHLD) to parent process



if (child process in zombie state) // init remove child from process table send death of child (SIGHLD) to parent

}

9/3/2009 Mohamed M Khalil, Ph.D. 52



exit – system call-example

main () { int child; if ((child = fork ()) == 0) { printf (“CHILD pid %D \n”, getpid ()); pause (); //suspend execution until signal } // parent printf (“child PID %d\n”, child); }



9/3/2009



Mohamed M Khalil, Ph.D.



53



process group



• • • •



Processes on UNIX are identified by a unique ID number and by group id number. Both ids are saved in the process table. Kernel uses process group number to identify group of related processes that should receive a common signal. Processes that have a common ancestor process that is a login shell receives a common signal when the user hits control-d character. setpgrp system call sets the group id equal to the process id.



grp = setpgrp ();



9/3/2009



Mohamed M Khalil, Ph.D.



54



exec – system call

• • exec invoke another program and overlay the memory space of the process with the copy of the executable file. The old user context is no longer accessible except for the exec’s parameters.



exec (filename, argv, envp) 1. filename is the name of the file to be executable 2. argv is a pointer to an array of characters that are parameters to the program. 3. envp is a pointer to an array of characters which have the environment of the executable program (e.g. name = value).



4. execl. execv, execle etc are different s of exec.

• • exec access the file’s inode via algorithm namei, Determine that it is executable, user has permission to execute it. Since parameters to exec is part of the old memory space about to be freed, the kernel copy argv and envp to holding place such as the kernel stack.



9/3/2009



Mohamed M Khalil, Ph.D.



55



exec – system call (continue)

• • • Detach the old region using detachreg. The kernel allocates and attaches regions for text and data, load the contents of the executable file into memory (allocreg, attachreg, and loadreg). The data regions is divided into to parts: initialized at compile time and not initialized data regions. The kernel allocate region (allocreg) for the initialized data region, attach it (attachreg) and initializes the value of memory to 0. for the not initialized data region it increase the size of data region using the growreg. allocate (allocreg) and attach (attachreg) a user stack to the process. Copy the exec parameters into the user stack.









• •



Initialize the stack and program counter registers.

Release the inode which are allocated by namei in the beginning of exec using iput. The process id stays the same and it position in the process hierarchy stays the same, but only the user contexts change.



9/3/2009



Mohamed M Khalil, Ph.D.



56



exec – algorithm

exec

Input : file name parameter list environment variable list { get file inode (namei) verify file executable, user has permission to execute read file headers, check that it is load module copy exec parameters from old address space to system space for (every region attached to the process) detach all regions (detachreg) for (every region specified in load module) allocate new region (allocreg) attach the region (attachreg) load region to memory if appropriate (loadreg) copy exec parameters into new user stack region initialize registers (e.g. program counter & stack register) release inode of file (iput) }



9/3/2009



Mohamed M Khalil, Ph.D.



57



exec – system call-example

main () { int status; if (fork () == 0) exec (“/bin/date”,”date”,0); wait (&status) }



• • • • • • •



The kernel finds that the /bin/date is an executable file and all users can execute it. The kernel copy “/bin/date”, “date”, into a holding place (e.g. kernel stack). Free text, data, and stack regions occupied by the process. Allocate new text, data, and stack . Copy the instructions of /bin/date/ into the text region, and copy the data area into the data region. The kernel copy the argument “date” into the user stack. After the exec the child process is executing the “date” program. When the date program terminates it receives the parent process received its exit status from the wait call.



9/3/2009



Mohamed M Khalil, Ph.D.



58



exec – executable file structure

Primary Header Section 1 Header

Magic Number Number Of Sections Initial Register Values



Section Type Section Size Virtual Address



Section n Header Section 1



Section Type Section Size Virtual Address



Data (e.g. text)



Section n



Data (e.g. text)



• •



primary header: describe how many sections in the file, the start address for the process execution, the magic number which identify the executable file. Section Headers: describe the section size, type and virtual address for the section.







Data: the section data contains information such as the text that is initially loaded in the process address space. Section data could contains symbol table or debugging information.



9/3/2009



Mohamed M Khalil, Ph.D.



59



changing the size of the process’s data region

Two functions to change the size of the process 1. brk (ends), ends the highest virtual address of the data region called its break value 2. oldends = sbrk (inc) inc, change the current break value by inc number of bytes, oldends is the break value before the call. • • • Kernel checks if the new process size is less than the system maximum. The new data region doesn’t overlap with other regions. If all checks pass the kernel invoke growreg to allocate auxiliary memory (e.g. page tables) for the data region and increments the process size.









It tries to allocate memory for the new space and initialize it to 0. If not able to allocate memory, it swaps the process out until the new space is available.

The new increased space is virtually contagious with the old one.



9/3/2009



Mohamed M Khalil, Ph.D.



60



brk – algorithm



brk Input : new break value Output: old break value lock process data region if (region size is increasing & new region size is illegal) unlock data region return error change region size (growreg) zero out addresses in new data space unlock process data region



9/3/2009



Mohamed M Khalil, Ph.D.



61



brk – example

Main () { char *endpt; endpt = sbrk(0); printf (“endpt = %ud \n”, endpt); while (endpt -- ) { if (brk (endpt) == -1) { printf (“brk of %ud failed\n”,endpt); exit (); } } }

9/3/2009 Mohamed M Khalil, Ph.D. 62




Related docs
Other docs by yagnesh darji
unix-ch02-01
Views: 67  |  Downloads: 6
unix-ch10-04
Views: 78  |  Downloads: 5
ASP_NET_XP_01
Views: 64  |  Downloads: 1
unix-ch03-01
Views: 156  |  Downloads: 3
unix-ch09-03
Views: 35  |  Downloads: 3
unix-ch10-01
Views: 390  |  Downloads: 24
bach
Views: 130  |  Downloads: 3
unix-ch02-03
Views: 92  |  Downloads: 2
Project Slides
Views: 28  |  Downloads: 0
unix-ch06-03
Views: 380  |  Downloads: 24
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!