原创 惡霸調度器-實時調度器

1.內核如何組織調度實體: struct task_struct { ... struct sched_rt_entity rt; ... } struct sched_rt_entity { struc

原创 Linux調度-概覽

1.調度什麼?直接把task_struct直接串起來一個個調度?還是專門設計一個結構來做用於調度的實體 2.什麼時候調度?也就是何時該去發動調度器去切換下一個任務? 3.怎麼調度?策略是什麼?當要切換下一個任務時選擇的原則是什麼? 調度

原创 Linux調度-主調度器

核心調度器,其實就是schedule這一個函數,當一個進程覺得自己無事可做了,可以調用該函數釋放CPU,讓其他進程佔用CPU完成任務。粗略看下代碼,做了一些註釋。 asmlinkage __visible void __sched sc

原创 CFS-完全公平調度器

CFS實現的公平的基本原理是這樣的:指定一個週期,根據進程的數量,大家”平分“這個調度週期內的CPU使用權,調度器保證在一個週期內所有進程都能被執行到。CFS和之前O(n)調度器不同,優先級高的進程能獲得更多運行時間,但不代表優先級高的進

原创 Linux調度-週期性調度器

很早以前有一個問題:搞單片機的時候,在不做響應任何中斷的前提下,任何一個模塊代碼跑一個死循環,機器一定會卡死。但是到了接觸linux之後,發現不論是在內核中還是用戶層代碼中,while(1)把機器搞死機這樣的操作完全失效了,這是爲什麼?

原创 高通看門狗驅動-MSM Watchdog

源碼中的文檔: 不論是軟狗還是硬狗,大體思路都差不多: 準備一個定時器,定時10s,超時之後啓動地球毀滅程序~~~。爲了防止地球毀滅,需要時不時的將計時器的計數值清零,稱爲喂狗。一般看門狗定時器是無論系統跑飛還是卡死都能正常運行的,一般

原创 Linux調度-調度時機和調度條件

struct thread_info { unsigned long flags; /* low level flags */ int preempt_count; /* 0 => preemptable

原创 Linux調度-關於搶佔的幾個配置

config PREEMPT_NONE bool "No Forced Preemption (Server)" help This is the traditional Linux preemption model, gea

原创 Linux的優先級

linux的優先級表示很叫人頭大,所有就總結了一張圖: 再看看代碼,文件prio.h的一些宏: #define MAX_NICE 19 #define MIN_NICE -20 #define NICE_WIDTH (MAX_NICE

原创 Linux如何處理信號

從Crtl+C開始: 之前一直有一個問題:在shell下運行一個程序,每次想中途停止這個程序時,下意識的就會按下Ctrl+C就可以終止當前阻塞在終端的進程,Ctrl+C這個組合鍵按下到底都發生了什麼? 其實這個操作就是向前臺進程發送SIG

原创 Linux的內核的信號量

信號量結構很簡單,各個成員的作用通過名字基本就知道幹啥用的: struct semaphore { raw_spinlock_t lock;//保證信號量原則操作的鎖 unsigned int count;//“量”,如果爲1一

原创 Linux的鏈表

什麼是鏈表? 鏈表可以想象成就是一條鎖鏈,每一個環上面都可以刻些信息在上面,有新的信息要記錄就拿出新的一環把信息刻上去然後打開鎖鏈一頭加上去,要使用上面的某一環取下來即可。把這些信息串起來方便管理(排序、增減、查找) 該怎麼實現鏈表?

原创 關於立即數

在彙編時,我們常會用到立即數。 但是立即數是有條件限定的: 當一個數小於255不用判斷,它是立即數。 當大於255時: 把數據轉換成二進制形式,從低位到高位寫成4位1組的形式。 if(count of 1 > 8) isNotImmed

原创 ARM—工作狀態,工作模式

ARM32位 ARM指令集 Thumb指令集(一個不完整的) 區別:Thumb指令集是ARM指令集的空間壓縮的子集,Thumb指令集不能替代ARM指令集 由於Thumb指令的長度爲16位,即只用ARM指令一半的位數來實現同樣

原创 (進程的變身)exec函數族

功能:讓一個進程變身成另一個進程,做另外的事情; 在Linux中,Shell進程是所有執行碼的父進程。當一個執行碼執行時,Shell進程會fork子進程然後調用exec函數去執行執行碼。Shell進程堆棧中存放着該用戶下的所有環境變量,