程序提供兩種虛擬機制,虛擬cpu和虛擬記憶體
linux中所有的程序都在乙個list中,可以通過下面的方法來訪問整合中的子執行緒
struct task_struct *task;
struct list_head *list;
list_for_each(list,¤t->children)
這裡的sibling是task_struct中的成員變數,表示這個task的所有子程序
遍歷所有程序
struct task_struct *task;
for(task=current;task!=&init_task;task=task->parent)
獲取下乙個程序
struct task_struct *task;
list_entry(task->tasks.next;struct task_struct,tasks)
獲取前乙個程序
struct task_struct *task;
list_entry(task->tasks.prev;struct task_struct,tasks)
通過for_each_process可以遍歷所有的task
struct task_struct *task;
for_each_process(task)
user space 通過fork/clone 來建立新的程序,在kernel中通過kthread_create/kthread_run來建立執行緒,
其中kthread_create建立的執行緒不會立即執行,而kthread_run建立的執行緒會立即執行.
這兩者的關係如下:
#define kthread_run(threadfn, data, namefmt, ...) \
()可以在核心執行緒中呼叫do_exit()或者kthread_stop()來退出核心執行緒
cfs 排程不在有時間片的概念,而是確保每個程序公平的分配處理器執行時間
在kernel/sched_fair.c中的update_curr()函式會更新sched_entity
struct sched_entity ;
static void update_curr(struct cfs_rq *cfs_rq)
排程器的入口是schedule()函式,其要做的事情就會通過pick_next_task()來選擇乙個高優先順序的程序
context_switch()來執行程序的切換
set_tsk_need_resched()來設定程序中的need_resched標誌,clear_tsk_need_resched()來清除need_resched標誌,need_resched()用來判斷這個標誌是否置位
使用者搶占發生在:從系統呼叫返回使用者空間,從中斷處理程式返回使用者空間
核心搶占發生在:中斷程式返回核心空間之前,核心**再一次具有可搶占性的時候,核心顯示呼叫是schedule(),核心任務阻塞
使用者空間程式可以條用sched_yield()來放棄cpu
遍歷鍊錶:list_for_each / list_for_each_entry /list_for_each_entry_reverse
遍歷的同時刪除list_for_each_entry_safe / list_for_each_entry_safe_reverse
核心中的佇列是通過kfifo來實現的
對映是指乙個key 關聯乙個指標
儲存大量資料,並且要求檢索迅速就用紅黑樹
異常與中斷不同,它產生是必須考慮與處理器的時鐘同步,所以異常也被稱為同步中斷
中斷不可以重入,設定irqf_shared標誌可以共享中斷,用引數dev可以卻分是哪個裝置的中斷
軟中斷執行的是在:硬中斷返回時/ksoftirq,顯式呼叫軟中斷,軟中斷的入口函式是do_softirq()
taskset和軟中斷 可以工作在中斷上下文,而workqueue 只能工作在程序上下文。
local_bh_disable/local_bh_enable 可以啟用本地處理器的軟中斷和tasklet的處理
核心的同步方法有:原子操作/自旋鎖/讀寫自旋鎖/訊號量/讀寫訊號量/互斥體/完成量/順序鎖/順序和屏障
vfs中的四個主要物件型別是:超級快物件,索引節點物件,目錄項物件,檔案物件
i/o排程策略:as**,cfq 完全公正的排隊,dealine 最終期限,noop,可以通過命令列倉鼠elevator=as來修改所有塊裝置的排程策略
使用depmod -a 產生模組依賴,模組依賴資訊在/lib/modules/version/modules.dep中
Python核心程式設計 第三版 練習
目錄 1.6 練習 1 16 1 17 1 16 為gendata.py更新 使資料直接輸出一redata.txtm而不是螢幕。user bin env python from random import randrange,choice from string import ascii lower...
程序 深入理解Linux核心(第三版)
寫在前面的話,因為只看不思考真的很睏,所以把一些疑惑和重要的地方記下來。1.程序與執行緒的區別 程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和分派的基本單位。2.父子程序 共享含有程式 的頁,但是各自擁有獨立的資料拷貝,因此子程序對乙個記憶體單元的修改對父程序是不...
編譯apue 第三版
想要直接使用作者提供的源 就需要編譯下,這個檔名是src.3e.tar.gz 很簡單的幾步就搞定了.解壓src.3e.tar.gz 進入apue.3e make 進入apue.3e lib目錄,複製libapue.a到 usr local lib目錄 進入 apue.3e include目錄,複製 ...