內核和進程調度
發布時間:2012/4/3 0:31:30 訪問次數:1259
MantisOS使用了類似于UNIX的進程調度模式,提供基于NJM2902V(TE1)優先級的多線程調度和同一優先級中進行輪轉調度服務。它的運行時間片是可配置的,目前設置為lOms。MantisOS也支持互斥信號量和計數信號量。MantisOS在邏輯上把RAM分配成兩部分:一部分是在編譯時分配給全局變量的,另一部分以堆的形式管理。當系統創建一個新的線程時,內核就從堆中分配堆棧空間,當線程結束喇,空間又被歸還給堆。
內核主要的全局數據結構是線程表,每個線程有一個條目。當線程表靜態分配后,擁有指定的最大線程數和指定大小的存儲單元。在編譯時,最大線程數是可以動態調整的(默認是12)。每個線程表條目是10B(包含一個當前棧指針、棧邊界信息(基本指針和大小)、指向線程開始函數的指針、目前線程狀態、當前線程的掛起狀態、線程優先級、線程的休眠時間、端口號(只用于網絡接收)和指向下一線程的指針)。線程有5種狀態:空閑、運行、就緒、阻塞、休眠。線程的阻塞狀態有兩種:阻塞空閑狀態和阻塞休眠狀態。MOS為線程設置了5種不同的優先級:內核級優先級、休眠級優先級、高優先級、正常級優先級、空閑優先級。當線程掛起時,線程的上下文環境(包括保存的寄存器值)存儲在它的棧中(這非常重要)因為線程的上下文環境比線程表條目要大得多,當線程分配時,它只需要存儲起來即可,所示線程表的靜態開銷炅有120B。
內核還為每一個優先級別的線程保存表頭和表尾指針(默認為SB大小,總共20B),可方便快速增加和刪除。這樣一來,當操作線程鏈表時,可提高性能,因為這些操作很頻繁,并且時常與中斷一起發生。內核還包括一個2B大小的當前線程指針、1B大小的中斷狀態,1B大小的標志位。這樣,進程調度表總的靜態開銷大小是144B。
MOS也可以使用信號量機制,應用程序可以根據自己的需要在程序中聲明。信號量是一個5B的結構,包含計數器字節(或稱為“鎖”)、頭指針、尾指針。在任何特定的時間中,任何一個線程要么屬于一個就緒列表,要么屬于信號量列表的。
系統在以下情況會引發上下文環境的切換:調度器接收到一個來自硬件的定時器中斷、系統調用、信號量的操作。定時器中斷是唯一由內核處理的中斷——其他硬件中斷被直接發送到相關設備驅動中進行處理。設備驅動在接收到中斷后拋出一個信號量,用以激活一個等待線程,該線程處理導致該事件產生的中斷。
除了驅動線程和用戶線程外,還有一個由內核在啟動時創建的idle線程,idle線程的優先級很低(只有其他線程阻塞時才運行)。idle線程可以檢測CPU的利用情形,并且調整內核參數以節約能量。
內核主要的全局數據結構是線程表,每個線程有一個條目。當線程表靜態分配后,擁有指定的最大線程數和指定大小的存儲單元。在編譯時,最大線程數是可以動態調整的(默認是12)。每個線程表條目是10B(包含一個當前棧指針、棧邊界信息(基本指針和大小)、指向線程開始函數的指針、目前線程狀態、當前線程的掛起狀態、線程優先級、線程的休眠時間、端口號(只用于網絡接收)和指向下一線程的指針)。線程有5種狀態:空閑、運行、就緒、阻塞、休眠。線程的阻塞狀態有兩種:阻塞空閑狀態和阻塞休眠狀態。MOS為線程設置了5種不同的優先級:內核級優先級、休眠級優先級、高優先級、正常級優先級、空閑優先級。當線程掛起時,線程的上下文環境(包括保存的寄存器值)存儲在它的棧中(這非常重要)因為線程的上下文環境比線程表條目要大得多,當線程分配時,它只需要存儲起來即可,所示線程表的靜態開銷炅有120B。
內核還為每一個優先級別的線程保存表頭和表尾指針(默認為SB大小,總共20B),可方便快速增加和刪除。這樣一來,當操作線程鏈表時,可提高性能,因為這些操作很頻繁,并且時常與中斷一起發生。內核還包括一個2B大小的當前線程指針、1B大小的中斷狀態,1B大小的標志位。這樣,進程調度表總的靜態開銷大小是144B。
MOS也可以使用信號量機制,應用程序可以根據自己的需要在程序中聲明。信號量是一個5B的結構,包含計數器字節(或稱為“鎖”)、頭指針、尾指針。在任何特定的時間中,任何一個線程要么屬于一個就緒列表,要么屬于信號量列表的。
系統在以下情況會引發上下文環境的切換:調度器接收到一個來自硬件的定時器中斷、系統調用、信號量的操作。定時器中斷是唯一由內核處理的中斷——其他硬件中斷被直接發送到相關設備驅動中進行處理。設備驅動在接收到中斷后拋出一個信號量,用以激活一個等待線程,該線程處理導致該事件產生的中斷。
除了驅動線程和用戶線程外,還有一個由內核在啟動時創建的idle線程,idle線程的優先級很低(只有其他線程阻塞時才運行)。idle線程可以檢測CPU的利用情形,并且調整內核參數以節約能量。
MantisOS使用了類似于UNIX的進程調度模式,提供基于NJM2902V(TE1)優先級的多線程調度和同一優先級中進行輪轉調度服務。它的運行時間片是可配置的,目前設置為lOms。MantisOS也支持互斥信號量和計數信號量。MantisOS在邏輯上把RAM分配成兩部分:一部分是在編譯時分配給全局變量的,另一部分以堆的形式管理。當系統創建一個新的線程時,內核就從堆中分配堆棧空間,當線程結束喇,空間又被歸還給堆。
內核主要的全局數據結構是線程表,每個線程有一個條目。當線程表靜態分配后,擁有指定的最大線程數和指定大小的存儲單元。在編譯時,最大線程數是可以動態調整的(默認是12)。每個線程表條目是10B(包含一個當前棧指針、棧邊界信息(基本指針和大小)、指向線程開始函數的指針、目前線程狀態、當前線程的掛起狀態、線程優先級、線程的休眠時間、端口號(只用于網絡接收)和指向下一線程的指針)。線程有5種狀態:空閑、運行、就緒、阻塞、休眠。線程的阻塞狀態有兩種:阻塞空閑狀態和阻塞休眠狀態。MOS為線程設置了5種不同的優先級:內核級優先級、休眠級優先級、高優先級、正常級優先級、空閑優先級。當線程掛起時,線程的上下文環境(包括保存的寄存器值)存儲在它的棧中(這非常重要)因為線程的上下文環境比線程表條目要大得多,當線程分配時,它只需要存儲起來即可,所示線程表的靜態開銷炅有120B。
內核還為每一個優先級別的線程保存表頭和表尾指針(默認為SB大小,總共20B),可方便快速增加和刪除。這樣一來,當操作線程鏈表時,可提高性能,因為這些操作很頻繁,并且時常與中斷一起發生。內核還包括一個2B大小的當前線程指針、1B大小的中斷狀態,1B大小的標志位。這樣,進程調度表總的靜態開銷大小是144B。
MOS也可以使用信號量機制,應用程序可以根據自己的需要在程序中聲明。信號量是一個5B的結構,包含計數器字節(或稱為“鎖”)、頭指針、尾指針。在任何特定的時間中,任何一個線程要么屬于一個就緒列表,要么屬于信號量列表的。
系統在以下情況會引發上下文環境的切換:調度器接收到一個來自硬件的定時器中斷、系統調用、信號量的操作。定時器中斷是唯一由內核處理的中斷——其他硬件中斷被直接發送到相關設備驅動中進行處理。設備驅動在接收到中斷后拋出一個信號量,用以激活一個等待線程,該線程處理導致該事件產生的中斷。
除了驅動線程和用戶線程外,還有一個由內核在啟動時創建的idle線程,idle線程的優先級很低(只有其他線程阻塞時才運行)。idle線程可以檢測CPU的利用情形,并且調整內核參數以節約能量。
內核主要的全局數據結構是線程表,每個線程有一個條目。當線程表靜態分配后,擁有指定的最大線程數和指定大小的存儲單元。在編譯時,最大線程數是可以動態調整的(默認是12)。每個線程表條目是10B(包含一個當前棧指針、棧邊界信息(基本指針和大小)、指向線程開始函數的指針、目前線程狀態、當前線程的掛起狀態、線程優先級、線程的休眠時間、端口號(只用于網絡接收)和指向下一線程的指針)。線程有5種狀態:空閑、運行、就緒、阻塞、休眠。線程的阻塞狀態有兩種:阻塞空閑狀態和阻塞休眠狀態。MOS為線程設置了5種不同的優先級:內核級優先級、休眠級優先級、高優先級、正常級優先級、空閑優先級。當線程掛起時,線程的上下文環境(包括保存的寄存器值)存儲在它的棧中(這非常重要)因為線程的上下文環境比線程表條目要大得多,當線程分配時,它只需要存儲起來即可,所示線程表的靜態開銷炅有120B。
內核還為每一個優先級別的線程保存表頭和表尾指針(默認為SB大小,總共20B),可方便快速增加和刪除。這樣一來,當操作線程鏈表時,可提高性能,因為這些操作很頻繁,并且時常與中斷一起發生。內核還包括一個2B大小的當前線程指針、1B大小的中斷狀態,1B大小的標志位。這樣,進程調度表總的靜態開銷大小是144B。
MOS也可以使用信號量機制,應用程序可以根據自己的需要在程序中聲明。信號量是一個5B的結構,包含計數器字節(或稱為“鎖”)、頭指針、尾指針。在任何特定的時間中,任何一個線程要么屬于一個就緒列表,要么屬于信號量列表的。
系統在以下情況會引發上下文環境的切換:調度器接收到一個來自硬件的定時器中斷、系統調用、信號量的操作。定時器中斷是唯一由內核處理的中斷——其他硬件中斷被直接發送到相關設備驅動中進行處理。設備驅動在接收到中斷后拋出一個信號量,用以激活一個等待線程,該線程處理導致該事件產生的中斷。
除了驅動線程和用戶線程外,還有一個由內核在啟動時創建的idle線程,idle線程的優先級很低(只有其他線程阻塞時才運行)。idle線程可以檢測CPU的利用情形,并且調整內核參數以節約能量。
上一篇:MantisOS操作系統
上一篇:網絡棧和通信層(COMM)