2018-2019-1 20165219 《資訊安全系統設計基礎》第七週學習總結
阿新 • • 發佈:2018-11-11
2018-2019-1 20165219 《資訊安全系統設計基礎》第七週學習總結
教材學習內容總結
一
異常:是控制流中的突變,一部分由硬體實現,一部分由作業系統實現,用來響應處理器狀態中的某些變化。
異常的類別:
中斷:是一步發生的,是來自處理器外部的I/O裝置的訊號的結果。
陷阱:是有意的異常,是執行一條指令的結果。
故障:由錯誤情況引起,可以被故障處理程修正。
終止:是不可修復的致命錯誤導致的。
二
系統中的每個程式都執行在某個程序的上下文中
父程序通過呼叫fork函式來建立一個新的執行的子程序
fork函式呼叫一次返回兩次。一次是返回到父程序,另一次是返回到新建立的子程序,父程序和子程序是併發執行的。
幾個抽象:
邏輯控制流:提供一個假象,好像我們的程式獨佔地使用處理器
私有的地址空間:提供一個假象,好像我們的程式獨佔地使用記憶體系統
程序控制:
回收子程序
當一個程序由於某種原因終止時,程序被保持在一種已終止的狀態中,直到被它的父程序回收。
一個程序呼叫waitpid函式等待它的子程序終止或停止
`#include <sys/types.h>
#include <wait.h>
pid_t waitpid(pid_t pid,int *statusp,int options);`
執行程式
execve函式在當前程序的上下文中載入並執行一個新程式
課上測試補做
實現ls
開啟目錄檔案
針對目錄檔案
讀取目錄條目
顯示檔名
關閉檔案目錄檔案
#include <stdio.h> #include <sys/types.h> #include <dirent.h> void do_ls(char []); int main(int argc, char *argv[]) { if ( argc == 1 ) do_ls( "." ); else while ( --argc ){ printf("%s:\n", *++argv ); do_ls( *argv ); } return 0; } void do_ls( char dirname[] ) { DIR *dir_ptr; struct dirent *direntp; if ( ( dir_ptr = opendir( dirname ) ) == NULL ) fprintf(stderr,"ls1: cannot open %s\n", dirname); else { while ( ( direntp = readdir( dir_ptr ) ) != NULL ) printf("%s\n", direntp->d_name ); closedir(dir_ptr); } } ~