20165218 2018-2019-1 《資訊安全系統》第八章學習總結
阿新 • • 發佈:2018-11-21
20165218 2018-2019-1 《資訊安全系統》第八章學習總結
教材學習內容總結
異常
- 異常的四個類別:中斷、陷阱(和系統呼叫)、故障、終止
- C程式用
syscall
函式可以直接呼叫任何系統呼叫
程序
- 異常是允許作業系統核心提供程序概念的基本構造快
- 系統中的每個程式都執行在某個程序的上下文中。上下文是由程式正確執行所需的狀態組成。這個狀態包括存放在記憶體中的程式的程式碼和資料,它的棧、通用目的暫存器的內容、程式計數器、環境變數以及開啟檔案描述符的集合。
- 併發和並行
每個私有地址空間都具有相同的通用結構,Linux程序的地址空間的組織結構
- 程式碼段 .text:這是CPU執行的機器指令部分。通常正文段是共享的,而且是隻讀的,以防止程式修改其自身的指令。總是從地址0x400000開始。
- 資料段 .data。資料段包含了程式中需要明確賦初值的變數。
- 非初始化資料段 bss。bss 起始於 IBM 704組合語言中的 Block Storage Start 指令的首字母縮寫,並且沿用至今。
- 程式碼段 .text:這是CPU執行的機器指令部分。通常正文段是共享的,而且是隻讀的,以防止程式修改其自身的指令。總是從地址0x400000開始。
- 執行在核心模式中的程序可以執行指令集中的任何指令,並且可以訪問系統中的任何位置;使用者模式中的程序不允許執行特權指令
graph LR
A[使用者模式]-->|異常|B[核心模式]
程序控制
獲取程序ID
#include <sys/types.h> #include <unistd.h> pid_t getpid(void); //返回程序的PID pid_t getppid(void); //返回父程序PID
終止程序
- 程序總處於執行、停止(掛起)、終止三種狀態之一。
#include <stdio.h>
void exit(int status);
//status=0 程序正常終止;status=1或-1,程序異常退出
fork()函式建立子程序
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
fork()函式呼叫一次,返回兩次。在父程序中,fork返回子程序PID,在子程序中,fork返回0。若呼叫了n次fork,則返回2^n次。
回收子程序
#include <sys/types.h> #include <wait.h> pid_t waitpid(pid_t pid, int *statusp, int options);
程序休眠
#include <unistd.h>
unsigned int sleep(unsigned int secs);//secs為請求休眠的時間
如果請求的時間已經到了,返回0,否則返回剩下的秒數。
載入並執行程式
#include <unistd.h>
int execve(const char *filename, const char *argv[], const char *envp);
程式碼除錯中的問題和解決過程
- 問題1:在編譯含有標頭檔案
#include <csapp.h>
的程式碼時,提示找不到標頭檔案。 - 問題1解決方案:經查資料發現"csapp.h"和"csapp.c"是本書作者自己編寫的,網上大部分資料下載都需要積分,最後在《深入理解計算機系統》中"csapp.h"無法識別問題中找到了原始碼,下載後根據深入理解計算機中的 csapp,h和csapp.c的指導操作即可。編譯時要在最後加上
-lpthread
.