OS Structure & Processes Vivek Pai COS 318 September 20, 2001 OS Structure & Processes 1 Foodundgedank You’re the host/hostess of a banquet hall that has accidentally been double-booked. It has three rooms – the large dining room, the cocktail room, and a small buffet line room. If each guest is given a card with the room layout with table numbers, and the guest’s own table number, how can you solve this problem? What issues are involved regarding the sizes of the two groups? OS Structure & Processes 2 Administrative First precept happened, more to come – Room scheduling not finalized, but 103 likely – Friday may be at 3:30 instead of 3:00 Politely remind me if I’m running late I’ve forgotten about the feedback paper Next reading assignment: 1.4, 1.5 OS Structure & Processes 3 A Friendly Deception Hiding information Giving out different information while appearing to be the same Stalling when necessary Drawback? Maybe lots of extra work Benefit: makes life easier for user OS Structure & Processes 4 Host/Hostess Problem Each group < 50% – Have two sets of cards with different numbering schemes Each group slightly above 50% – Slow down the buffet line & entrance Each group near 100% – One group in dining room, other in cocktail room OS Structure & Processes 5 Users, Programs, Processes Users have accounts on the system Users launch programs – Many users may launch same program – One user may launch many instances of the same program Processes are instances of a program – The “program” can really be a set of processes OS Structure & Processes 6 Programs As Process Collections Netscape (output of “ps x”) – 7253 p0 S – 7280 p0 I 0:19.26 /usr/local/lib/netscape/communicator-4.75.bin -irix-s 0:00.15 (dns helper) (communicator-4.7) gcc (via “gcc –pipe –v”) – – – – /usr/libexec/cpp | /usr/libexec/cc1 | /usr/libexec/as, followed by /usr/libexec/elf/ld OS Structure & Processes 7 gcc example You launch gcc It first launches cpp, cc1, as It then launches ld Each instance is a process, and each program actually exists separately – You could launch cc1 manually if you wanted OS Structure & Processes 8 So What Is A Process? It’s one instance of a “program” It’s separate from other instances It can start (“launch”) other processes It can be launched by them OS Structure & Processes 9 What Does This Program Do? int myval; int main(int argc, char *argv[]) { myval = atoi(argv[1]); while (1) printf(“myval is %d, loc 0x%lx\n”, myval, (long) &myval); } OS Structure & Processes 10 Here’s The Output OS Structure & Processes 11 Instances Of Programs The address was always the same The values were different – Implies that the programs aren’t seeing each other – But they think they’re using the same address Conclusion: addresses are not absolute What’s the benefit? OS Structure & Processes 12 So What’s In A Process? Information about the hierarchy – What launched it – What it has launched Information about resources – Where is it storing data – What other resources it’s using Various kinds of mappings OS Structure & Processes 13 Consider How To Read a File Compare read( ) and fread( ) read(int d, void *buf, size_t nbytes) read() attempts to read nbytes of data from the object referenced by the descriptor d into the buffer pointed to by buf. fread(void *ptr, size_t size, size_t nmemb, FILE *stream) The function fread() reads nmemb objects, each size bytes long, from the stream pointed to by stream, storing them at the location given by ptr. OS Structure & Processes 14 Which is a System Call and Why read(int d, void *buf, size_t nbytes) fread(void *ptr, size_t size, size_t nmemb, FILE *stream) Both do the same thing, right? What gets “exposed” in each case What about a lying programmer – How hard is it to tell he/she is lying – What other malicious actions can occur? OS Structure & Processes 15 What State Is Implied? Consider the following sequence: read(int d, void *buf, size_t nbytes) read(int d, void *buf, size_t nbytes) read(int d, void *buf, size_t nbytes) What happens if two programs were doing this? OS Structure & Processes 16 Some Insight Into OS Array of File Pointers Process Actual File Info What do we gain from this? OS Structure & Processes 17 Some Insight Into OS Array of File Pointers Process Actual File Info Process OS Structure & Processes 18 Examining Those Other Parameters read(int d, void *buf, size_t nbytes) fread(void *ptr, size_t size, size_t nmemb, FILE *stream) Where is [buf, buf+nbytes)? Where is [ptr, ptr+size*nmemb)? OS Structure & Processes 19 Remember This? Application Libraries User space/level Kernel space/level Portable OS Layer Machine-dependent layer OS Structure & Processes 20 Address Space One (common) approach – Kernel is high memory – User is low memory What restrictions apply? read(f, buf, nbytes) OS Structure & Processes 0xffff…. Kernel space User space 0x0000… 21 Some Definitions Kernel – “heart” of the operating system – Like the program file generated by compiling all of the operating system files Operating system – usually includes more – Various libraries – Support programs Hard and fast definitions? Rarely OS Structure & Processes 22 More Address Space Program segments – – – – Text Data Stack Heap Any obvious choices? OS Structure & Processes 0xffff…. Kernel space User space 0x0000… 23 One Common Layout Lots of flexibility – Allows stack growth – Allows heap growth – No predetermined division 0xffff…. Kernel space Stack So what happens when you make a system call? OS Structure & Processes Heap Code & Data 0x0000… 24 Kernel Stack Kernel contains functions – Just like regular functions – Automatic variables, formal parameters, etc – They need a stack Can we use the user’s stack? – Is it possible? – Is it desirable? OS Structure & Processes 25 What Other Options Possible? Remember the host/hostess scenario? – What would happen if you had a break between courses – Can you apply this logic to the kernel? – What are the tradeoffs? OS Structure & Processes 26