第八章 異常控制流
ECF:(異常控制流)突變集合
平滑:順序結構的指令
突變:跳轉、調用、和傳回等指令,不在同一棧
基本機制:
ECF是作業系統用來實作I/O、程序和虛拟存器的基本機制 ECF是計算機系統中實作并發的基本機制
異常
控制流的突變
異常号:
系統為每種類型的異常配置設定的唯一的非負整數
異常表:
系統啟動時作業系統就會初始化一張條轉變,使得條目k包含異常k的處理程式的位址
用法:
從異常号到異常表的索引
類别:
中斷:來自處理器外部的I/O裝置的信号的結果,傳回下一條指令
陷阱:陷阱是有意的異常,系統調用
故障:由錯誤狀況引起,可能能夠被故障處理程式修正
終止:通常是一些硬體錯誤
彙編常用調用方式:call
通過CALL後面參數的指派實作不同類别的中斷或陷阱
中斷:call 21H(标準輸出,引用的是IOS)
陷阱:call 函數名
程序
程式運作在程序上下文中
程序提供給應用程式的關鍵抽象:
一個獨立的邏輯控制流:獨占的使用處理器
一個私有的位址空間:獨占的使用存儲器系統
程序利用CPU方式:SFCF,SRT,RR,和多及排程(常用)
多及排程特點:
以時間片輪轉進行程序安排
并發流
同時運作多個流
并行:兩個流并發的運作在不同的處理機核或者計算機上
控制權限位:差別使用者模式和核心模式
程序控制
每個程序都有一個唯一的正數程序ID(PID)
pid_t getpid(void); 傳回調用程序的PID
pid_t getppid(void); 傳回父程序的PID(建立調用程序的程序)
fork:
格式:pid_t fork(void)
格式:pid_t fork(void)
調用一次,傳回兩次
exit:
格式:void exit(int status);
格式:void exit(int status);
waitpid:
格式:pid_t waitpid(pid_t pid, int *status, int options);
成功傳回子程序PID,如果WNOHANG,傳回0,其他錯誤傳回-1.
wait:
wait(&status)等價于waitpid(-1,&status,0).
pid_t wait(int *status);
sleep:
unsigned int sleep(unsigned int secs);
unsigned int sleep(unsigned int secs);
pause
int pause(void);
int pause(void);
execve:
int execve(const char *filename, const char *argv[], const char *envp[]);
int execve(const char *filename, const char *argv[], const char *envp[]);
fork函數和execve函數的差別
fork函數是建立新的子程序,是父程序的複制體,在新的子程序中運作相同的程式,父程序和子程序有相同的檔案表,但是不同的PID
execve函數在目前程序的上下文中加載并運作一個新的程式,會覆寫目前程序的位址空間,但是沒有建立一個新程序,有相同的PID,繼承檔案描述符