1. 程式人生 > 其它 >作業系統真相還原 第十一章 使用者程序

作業系統真相還原 第十一章 使用者程序

第十一章 使用者程序

為什麼要有任務狀態段TSS

Linux 任務切換未採用 Intel 的做法,而是用了一套自己的方法,只用了 TSS 小部分功能。

現在作業系統採用的任務切換方式

CPU提供了0、1、2、3共4個特權級,linux只用了核心特權級0和使用者特權級3。

有一件工作必須且只能用 TSS 來完成,這就是 CPU 向更高特權級轉移時所使用的棧地址,需要提前在 TSS 中寫入。

導致轉移到更高特權級的一種情況是在使用者模式下發生中斷, CPU 會由低特權級進入高特權級,這會發生堆疊的切換。當一箇中斷髮生在使用者模式(特權級 ),處理器從當前TSS的SS0和esp0成員中獲取用於處理中斷的堆疊。因此,我們必須建立一個 TSS ,並且至少初始化 TSS 中的這些欄位。

我們使用 TSS 唯一的理由是為0特權級的任務提供棧。

實現使用者程序

程序的作用:

引入程序是為了實現多個任務的併發執行。程序就相當於一個任務。

執行緒的作用:

為了加快一個任務(程序)的執行,如果使用程序把一個任務拆分為多個程序,需要程序間協作通訊,資料交換。程序有自己的獨立儲存空間,資料交換需要經過系統呼叫。因此,一種共享儲存空間的程序概念應運而生,它被稱為輕量級程序(Light-Weight Process)。讓完成同一任務的輕量級程序共享一片儲存空間,而且輕量級程序又作為cpu排程的單位。輕量級程序也叫做執行緒。

linux早期只有程序,後來使用輕量級程序來支援多執行緒。