1. 程式人生 > >20165218 2018-2019-1 《資訊安全系統》第八章學習總結

20165218 2018-2019-1 《資訊安全系統》第八章學習總結

20165218 2018-2019-1 《資訊安全系統》第八章學習總結

教材學習內容總結

異常

  • 異常的四個類別:中斷、陷阱(和系統呼叫)、故障、終止
  • C程式用syscall函式可以直接呼叫任何系統呼叫

程序

  • 異常是允許作業系統核心提供程序概念的基本構造快
  • 系統中的每個程式都執行在某個程序的上下文中。上下文是由程式正確執行所需的狀態組成。這個狀態包括存放在記憶體中的程式的程式碼和資料,它的棧、通用目的暫存器的內容、程式計數器、環境變數以及開啟檔案描述符的集合。
  • 併發和並行
  • 每個私有地址空間都具有相同的通用結構,Linux程序的地址空間的組織結構

    • 程式碼段 .text:這是CPU執行的機器指令部分。通常正文段是共享的,而且是隻讀的,以防止程式修改其自身的指令。總是從地址0x400000開始。
    • 資料段 .data。資料段包含了程式中需要明確賦初值的變數。
    • 非初始化資料段 bss。bss 起始於 IBM 704組合語言中的 Block Storage Start 指令的首字母縮寫,並且沿用至今。
  • 執行在核心模式中的程序可以執行指令集中的任何指令,並且可以訪問系統中的任何位置;使用者模式中的程序不允許執行特權指令
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);

程式碼除錯中的問題和解決過程

程式碼託管

參考資料