日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

20135337朱荟潼 Linux第八周学习总结——进程的切换和系统的一般执行过程

發布時間:2025/4/16 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20135337朱荟潼 Linux第八周学习总结——进程的切换和系统的一般执行过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第八周 進程的切換和系統的一般執行過程

一、進程切換關鍵代碼switch_to

1.不同類型進程有不同調度需求——兩種分類

2.調度策略——規則

  • Linux中進程優先級是動態的,周期性調整。

3.時機

  • schedule()函數負責調度。

  • 中斷處理過程(包括時鐘中斷、I/O中斷、系統調用和異常)中,直接調用schedule(),或者返回用戶態時根據need_resched標記調用schedule();

  • 內核線程可以直接調用schedule()進行進程切換,也可以在中斷處理過程中進行調度,也就是說內核線程作為一類的特殊的進程可以主動調度,也可以被動調度;

  • 用戶態進程無法實現主動調度,僅能通過陷入內核態后的某個時機點進行調度,即在中斷處理過程中進行調度。

4.進程上下文包含了進程執行需要的所有信息

  • 用戶地址空間:包括程序代碼,數據,用戶堆棧等

  • 控制信息:進程描述符,內核堆棧等

  • 硬件上下文(與中斷保存硬件上下文的方法不同)

5.switch_to 切換寄存器的狀態

schedule()函數選擇一個新的進程來運行,調用switch_to來進行關鍵上下文切換

schedule() --> context_switch() --> switch_to --> __switch_to()

當schedule()需要暫停X進程的執行而繼續Y進程的執行時,就發生了進程之間的切換。

  • 進程切換主要有兩部分:1、切換全局頁表項;2、切換內核堆棧和硬件上下文。

switch_to時請注意:這是一個宏,不是函數。

  • 不是通過普通的call來實現,而是直接jmp,函數參數也并不是通過堆棧來傳遞,而是通過寄存器來傳遞。

二、Linux系統的一般執行過程

1.從正在運行的用戶態進程X到Y

X正在運行--->發生中斷,可能陷入內核,CPU自動保存加載--->SAVE_ALL保存現場--->調用schedule,switch_to進程上下文切換--->標號1之后運行Y(之前有進行準備動作)--->restore_all恢復現場--->iret- pop cs:eip/ss:esp/eflags from kernel stack--->繼續運行用戶態進程Y

2.特殊情況

  • 通過中斷處理過程中的調度時機,用戶態進程與內核線程之間互相切換和內核線程之間互相切換,與最一般的情況非常類似,只是內核線程運行過程中發生中斷沒有進程用戶態和內核態的轉換;

  • 內核線程主動調用schedule(),只有進程上下文的切換,沒有發生中斷上下文的切換,與最一般的情況略簡略;

  • 創建子進程的系統調用在子進程中的執行起點及返回用戶態,如fork;

  • 加載一個新的可執行程序后返回到用戶態的情況,如execve;

3.內核——Taxi

  • 內核地址空間的4G中3G以上是內核態可以訪問的——是所有進程共享的。

三、Linux系統架構和執行過程

1.執行ls命令

  • 涉及中斷、終端控制臺設備驅動的概念。
  • 過程:

    shell分析-->調用系統調用fork生成一個shell本身拷貝-->調用exec系統調用將ls可執行文件裝入內存-->從系統調用返回

四、實踐

schedule()函數選擇一個新的進程來運行,并調用context_switch進行上下文的切換,context_switch是一個宏,這個宏調用switch_to()函數來進行關鍵上下文切換
next = pick_next_task(rq, prev); //進程調度算法都封裝這個函數內部
context_switch(rq, prev, next); //進程上下文切換
switch_to利用了prev和next兩個參數:prev指向當前進程,next指向被調度的進程





總結

linux系統的一般執行過程

X正在運行--->發生中斷,可能陷入內核,CPU自動保存加載--->SAVE_ALL保存現場--->調用schedule,switch_to進程上下文切換--->標號1之后運行Y(之前有進行準備動作)--->restore_all恢復現場--->iret- pop cs:eip/ss:esp/eflags from kernel stack--->繼續運行用戶態進程Y

轉載于:https://www.cnblogs.com/zzzz5/p/5381424.html

總結

以上是生活随笔為你收集整理的20135337朱荟潼 Linux第八周学习总结——进程的切换和系统的一般执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。