redisson原理,讀《萊昂氏UNIX源代碼分析》

 2023-10-15 阅读 31 评论 0

摘要:在unix早期的代碼中,schedule和swap兩個核心任務都是由0號進程來負責的,這個樸實的設計就是unix系統最最原始的設計,因為unix在開始設計的時候十分清楚進程應該做什么不應該做什么,應該做它本職的工作,而諸如調度和置換之類的任務不應該由

在unix早期的代碼中,schedule和swap兩個核心任務都是由0號進程來負責的,這個樸實的設計就是unix系統最最原始的設計,因為unix在開始設計的時候十分清楚進程應該做什么不應該做什么,應該做它本職的工作,而諸如調度和置換之類的任務不應該由用戶進程負責,但是linux后來顛覆了這個想法,畢竟頻繁的切換帶來的開銷已經基本抵消了分工設計帶來的優雅,于是就將調度工作分擔給了各個進程本身,而置換工作仍舊由 內核進程來完成但是卻不是0號進程,而0號進程最終退化成了一個idle進程。

我們從原始的unix 6的代碼中可以看到schedule的實現,該實現中一共進行了兩次切換而不是像linux中的那樣僅僅一次,起初切換到0號進程,實際上就是切換了一下堆棧,核心堆棧切換到了0號進程就可以說當前的進程是0號進程了,代碼執行流依舊往下走,切換堆棧并沒有修改pc寄存器的值,因此進行了第一次切換以后的代碼就成了0號進程執行的了,0號進程接下來做什么呢?其實很簡單,就是在所有被換進內存的進程中找一個最值得運行的,這就涉及到了具體的調度策略。待0號進程選擇好了下一個進程之后,最后進行第二次切換,也就是切換到這個被選中的進程,切換的過程是簡單的,就是核心棧的切換,然后就是切換頁表,實際上那個時候的頁表被叫做區表,系統還沒有實現完全的虛擬內存管理,PDP-11機器使用寄存器來實現類似X86頁表的功能,在切換的過程中,將負責“虛擬頁面”和物理頁面映射的寄存器修改一下就可以了,因為一個時刻只有一個進程是運行態,所以進程的核心棧所在的位置是一個確定的位置,unix的這個設計非常好,系統變得簡單,只需要將這個確定位置的“虛擬內存”地址指向新進程的物理內存地址就可以了,物理內存由malloc分配,注意和標準c庫的malloc的區別和聯系,區別是功能不同,聯系是實現思想相同。這里不深談其它的地址映射,實際上內核空間的代碼是共享的,而用戶空間的不同,PDP-11機器分別用兩組寄存器來進行內核空間和用戶空間的地址映射,由此可見內核空間的映射是相同的,并且和后來的linux一樣,也用了一一的線性映射。這里可以看出代碼和數據的區別,雖然在調度函數里面執行的是一個函數的代碼,但是卻是不同的3個進程在執行,所以正是數據將進程區別了開來,而不是代碼,數據又被分為堆棧等等,因此切換了堆棧就是切換了進程,當然這里的堆棧是核心堆棧。這個設計被后來的windows所采用,一直到現在的Windows NT都直接體現了古老的unix的這一思想,將核心堆棧等等一些核心的數據結構放置于一個固定的內存地址,而linux卻不是這樣,這得益于linux中task_struct這一精巧結構的實現,在windows中和unix一樣也是將進程的控制塊分為了類似U區和proc結構,并且unix自從設計之初,優先級的概念就很重要,后來windows的IRQL也是借鑒了這一思想,說說看,linux是類unix系統嗎?除了API一樣之外幾乎完全顛覆了unix的一切,倒不如說windows的某些設計和unix很相似,當然這里不談微內核和大內核。

redisson原理。通觀unix 6代碼的fork和newproc函數的實現,簡直叫一個妙啊,很簡單,很明了,在父進程中直接返回子進程的pid,而子進程直接掛入進程隊列,待到系統進行調度的時候也就是switch的時候,子進程會返回switch的返回值,也就是0,switch的返回值簡直就是一石三鳥啊!unix在當時其實還沒有完全實現虛擬存儲,僅僅是很樸素的虛擬內存的概念,因此并沒有后來復雜的請求調頁機制,而是整個進程的換入換出,負責這件事的就是0號進程最后的那個無限大循環。在linux的請求調頁實現中,專門有一個內核線程負責頁面的換入和換出,當然必須處理的就是缺頁異常,linux靠缺頁處理以及kswapd實現了請求調頁。

總之,如果你想深入理解操作系統原理,那么務必看一下《萊昂氏UNIX源代碼分析》這一本書,這本書的分量可以任何講操作系統的書都要重,從中你可以得到操作系統最精髓的部分,比現如今動則五六百頁的書要簡單得多,簡單就是美。只求理解精髓!10000行左右的代碼竟然詮釋了如此一個龐然大物,并且作為后面幾乎所有操作系統的藍本一直發展壯大著,直到現在。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/143914.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息