Linux內核分析——操作系統的工作原理

一、實驗過程:

實驗內容爲完成一個簡單的時間片輪轉多道程序內核代碼

1.根據老師指導按照實驗步驟,在實驗樓環境下打開shell:

cd LinuxKernel/linux-3.9.4

rm -rf mykernel

patch -p1 < ../mykernel_for_linux3.9.4sc.patch

make allnoconfig

make

qemu -kernel arch/x86/boot/bzImage

然後 cd mykernel

看到mymain.c和myinterrupt.c.

2.將老師github的mypcb.h/mymain.c/myinterrupt.c拷貝到實驗樓環境的mykernel下,再按照實驗步驟進行,即可看到實驗的調度過程.修改這三個文件:

mypcb.h:
這裏寫圖片描述

mymain.c:

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

myinterrupt.c:

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

3.重新make編譯一下,然後執行會看到結果:

這裏寫圖片描述

二、分析該精簡內核的源代碼。

1.mypcb.h對結構體和函數進行了定義.定義了線程的ip與sp 線程的結構,其中SP寄存器指向當前線程棧的棧頂,這樣通過SP就能完成出入棧的操作;IP指向當前操作指令,一開始指向線程啓動函數,後面按照代碼的一層層調用,執行相應指令,接下來定義了進程控制塊PCB的初始信息。

2.mymain.c中__init my_start_kernel 函數是內核的入口,它完成了初始化進程並啓動進程的工作。 進程創建完畢後,將my_current_task指針指向0號進程,通過嵌入式彙編代碼,開始執行。這個嵌入式代碼實際上是開闢了新的棧幀空間,類似於上一課,也與myinterrupt.c的進程切換類似。 每個進程都執行my_process(void),i%10000000 == 0,打印進程號,略小於1s的時間。

3.myinterrupt.c中my_timer_handler被內核的定時器週期性調用,當計數到1000時執行進程切換。

4.其中的內嵌彙編代碼爲核心:

“pushl %%ebp\n\t” /* save ebp */

“movl %%esp,%0\n\t” /* save esp */

“movl %2,%%esp\n\t” /* restore esp */

“movl %2,%%ebp\n\t” /* restore ebp */

“movl $1f,%1\n\t” /* save eip */

“pushl %3\n\t”

“ret\n\t” /* restore eip */

“=m” (prev->thread.sp),”=m” (prev->thread.ip)

“m” (next->thread.sp),”m” (next->thread.ip)

“pushl %%ebp\n\t” /* save ebp */

“movl %%esp,%0\n\t” /* save esp */

“movl %2,%%esp\n\t” /* restore esp */

“movl %2,%%ebp\n\t” /* restore ebp */

“movl $1f,%1\n\t” /* save eip */

“pushl %3\n\t” “ret\n\t” /* restore eip */

“=m” (prev->thread.sp),”=m” (prev->thread.ip)

“m” (next->thread.sp),”m” (next->thread.ip)

三、理解操作系統是如何工作的。

  1. Linux操作系統的正常工作可以說有三個非常重要的部分,就是我們的存儲程序原理、堆棧以及中斷的支持。 操作系統對進程的管理主要就是進程的管理和調度,我們爲每個進程維護一個進程描述和以及進程間的關係。我們的內核的工作主要有兩部分組成,首先運行有一個內核線程,然後就是一些中斷處理程序的集合,我們在中斷處理程序中要就行進程的調度。

2.Linux操作系統由內核來實現具體工作的,一個進程是通過系統調用fork()函數來創建的,先是將先前CPU正在運行的進程的進程上下文保存在內核態堆棧中,包括有eip,esp,ebp,cs等寄存器的數據;然後加載創建的進程的上下文信息到相應的寄存器中,運行當前新建進程;運行完畢後根據系統的調度繼續執行相應的進程。Linux操作系統是多進程的操作系統,不同的進程就是基於以上的方式有操作系統實現調度運行的。同時,操作系統以一種中斷的機制實現與用戶的交互。操作系統中的IDT描述好各個中斷對應的處理程序,當發生相對應的中斷時,由硬件來實現中斷信號的傳遞,CPU接收到相應的IRQ信號後,由操作系統如調度進程那樣調度相應的處理程序,來完成相應的中斷請求,實現與用戶的交互。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章