學習筆記6 第三章的自學歸納
多任務處理
- 一般來說,多任務處理指的是同時進行幾項獨立活動的能力。在計算機技術中,指的是同時執行幾個獨立的任務。多任務處理是所有操作系統的基礎,總的來說,它也是并行編程的基礎。
進程的概念
- 進程是對映像的執行,操作系統內核將一系列執行視為使用系統資源的單一實體。系統資源包括內存空間、I/O設備以及最重要的CPU時間。在操作系統內核中,每個進程用一個獨特的數據結構表示,即PROC結構體,它包含了某個進程的所有信息。
- 如下是一個PROC結構體
![]()
1.next是指向下一個PROC結構體的指針
2.ksp保存的堆棧指針
3.pid是一個進程的進程編號
4.status是當前狀態
5.priority是進程調度優先級
6.kstack是進程執行時的堆棧
多任務處理系統
type.h文件
#define FREE 0
#define READY 1
#define SLEEP 2
#define ZOMBIE 3
typedef struct proc
{
struct proc *next;
int *ksp;
int pid;
int ppid;
int status;
int priority;
int kstack[SSIZE];
}
- type.h文件定義了系統常熟和表示進程的簡單PROC結構體。
ts.s文件
- ts.s文件在32位GCC匯編代碼中可實現進程上下文切換
queue.c文件
- 可實現隊列和鏈表操作
進程同步
-
是指控制和協調進程交互以確保其正確執行所需的各項規則和機制
-
睡眠模式/等待:ksleep(int event)
-
喚醒操作:kwakeup(event)
進程終止
-
分為正常終止和異常終止
-
進程家族樹:PROC child,sibling,*parent;
-
子進程,兄弟進程,父進程
-
等待子進程終止
-
無論何時,進程都能調用內核函數kwait等待僵尸子進程:pid = kwait(int *status)
Unix/Linux中的進程
1.進程來源
- 當操作系統啟動時,操作系統內核的啟動代碼會強行創建一個PID=0初始進程執行初始進程P0
2.INIT和守護進程
- 當進程P1開始運行時,它將其執行映像更改為INIT程序。P1 開始復刻出許多子進程,P1的大部分子進程都是用來提供系統服務的。它們在后臺運行,不與任何用戶交互。
3.登錄進程
- P1復刻了許多LOGIN進程,每個終端上一個,用于用戶登錄。
4.sh進程
- 當用戶成功登錄時,LOGIN進程會獲取用戶的gid和uid,從而稱為用戶的進程。他將目錄更改為用戶的主目錄并執行列出的程序,通常是命令解釋程序sh。
5.進程的執行模式
-
在Unix/Linux中進程以兩種不同的模式執行,即內核模式和用戶模式,簡稱Kmode和Umode。在每種執行模式下,一個進程有一個執行映像。
-
Umode只能通過中斷,陷阱,系統調用三種方式進入Kmode
進程管理中的系統調用
- fork()、wait()、exec()、exit()
I/O重定向
-
文件流和文件描述符
-
文件流I/O和系統調用
-
重定向標準輸入
-
如果用一個新打開的文件來替換文件描述符0,那么輸入將來自該文件而不是原始輸入設備。
-
重定向標準輸出
-
更改文件描述符1,指向打開的文件名,然后stdout的輸出將會轉到該文件而不是屏幕;同樣也可以將stderr重定向到一個文件。
管道
- 管道是用于進程交換數據的單向進程間通信通道。管道有一個讀取端和一個寫入端
- 管道命令處理
cmd1 | cmd2
sh將通過一個進程運行cmd1,并通過另一個進程運行cmd2,他們通過一個管道連接在一起,因此cmd1的輸出變為cmd2的輸入。
遇到的問題

蘇格拉底提問



浙公網安備 33010602011771號