The Tempo Operating System Part 5 System Calls Overview Last update 2 16 2009 System Call Documentation System calls for Tempo are documented in the file doc tempo32 txt but beware it is continually under modification For each call the file contains a prototype declaration indicating each of the parameters a textual description of the effect of the system call and indication of the values that might be returned indicating success or failure 1 Return Values System calls return NOERROR 0 indicating that the call was successfully completed A negative value indicating an exceptional condition e g 1001 to indicate that an operation was attempted on a non existent message queue A positive value conveying a result e g read and write return the number of bytes processed Error codes are symbolically defined in the file h syserrs h System Call Categories System calls can be grouped into several categories Process functions e g newproca kill Time functions e g sleep and time Memory management functions in infancy Semaphore functions e g up and down Interprocess communication functions e g send receive Low level I O functions console keyboard disk Filesystem and higher level I O functions open read Information functions getsysparm 2 Additional Categories Other operating systems may provide system calls in additional categories Most notable among these are Network and protocol related functions Graphic and window related functions including font management Event management e g in Windows Asynchronous signals as in UNIX Process Management Most modern systems have facilities for process management many also support threads kernel and or user threads Examples Windows CreateProcess CreateThread WaitForSingleObject UNIX Linux fork pthread create clone wait waitpid Although these calls vary from system to system the concept of a process is consistently present 3 Process Scheduling Process scheduling is a rich topic and there are numerous variations The most popular scheduling techniques include priority based scheduling higher priority tasks run before lower priority tasks run to completion scheduling a process runs until it blocks terminates or voluntarily yields the processor round robin scheduling each process runs for at most a quantum of time before being forced to yield to another ready process at the same priority Process Creation Currently the primary system call used in Tempo to create processes is newproca The function newproc is a shorthand version that calls newproca with some default parameters pid t newproc int root void int prio unsigned stksize root is the name of the function with which execution will begin prio is the initial priority for the new process stksize is the number of pages for the stack 0 means 1 4 Tempo newproca pid t newproca int root int char int prio unsigned stksize unsigned nargs unsigned char args root prio stksize as for newproc nargs is the number of command line arguments for the new process args points to an array of nargs null terminated character strings each of which contains one command line argument Tempo getpid exit getpstate pid t getpid Returns the process ID of the calling process void exit int status Terminates the calling process and provides that status be returned to any processes waiting for this process to terminate int getpstate pid t proc Returns the current status of the process with pid proc The status of the calling process is 2 meaning it s running other values defined in file h sysparm h 5 Tempo kill waitpid int kill pid t proc Terminates process proc and returns any resources it owns A process may terminate itself Note that this is not the same as the UNIX kill system call int waitpid pid t proc int exitstatus int timeout Waits for process with pid proc to terminate Then returns that process exit status to exitstatus timeout indicates how long waitpid should wait INFINITE 1 means wait forever 0 means never wait inappropriate with waitpid 0 means a wait for that many clock ticks Tempo quit getprio setprio void quit char msg Shuts down the system and display the string pointed to by msg if it is not NULL This should not normally be used by user processes int getprio void Returns the priority of the currently running process int setprio int newprio Sets the priority of the currently running process 6 Tempo yield setquantum int yield void Yields the CPU to the process at the head of the ready queue with the same priority as the current process int setquantum unsigned int nquantum Sets the quantum size in clock ticks to nquantum If this is 0 the system uses run to completion scheduling Otherwise each process is allowed to run for at most nquantum clock ticks before being preempted by another ready process at the same priority Tempo getquantum unsigned int getquantum void Returns the current quantum size setting for the system 7 Time Functions Many systems have calls that deal with time in one way or another The fundamental calls deal with several types of time the current wall clock time CPU time used by a process either in user mode or in kernel mode Windows Examples GetTickCount void returns the number of milliseconds that have elapsed since the system was started GetSystemTime returns the current system date and time GetSystemTimes returns total processor idle time time spent executing kernel code and time spent executing user mode code Sleep n causes a process to sleep for at least n milliseconds 8 UNIX Linux Example time returns time of day as seconds past 1 1 1970 at midnight UTC times returns kernel and user mode time for the current process and all terminated waited for child processes nanosleep causes a process to sleep for at least a give time specified in seconds and nanoseconds Tempo time sleep unsigned int time void Returns number of milliseconds since the system was started In earlier versions of the system the time between clock ticks that is interrupts could be adjusted The clock tick interval has now been standardized at one millisecond int sleep unsigned int nticks Causes the current process to sleep block for at least nticks milliseconds 9 Tempo setxlimit getxlimit int setxlimit unsigned int nticks Primarily for debugging purposes set the maximum execution time for the entire system to nticks milliseconds If this is 0 as it is by default no limit is enforced unsigned int getxlimit void Return the maximum execution time for the entire system in milliseconds This value is 0 if no limit is being enforced Question How could
View Full Document
Unlocking...