公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點晴永久免費OA]操作系統(tǒng)是如何一步步發(fā)明進程、線程的?

admin
2025年4月3日 15:17 本文熱度 554

作者 |?碼農的荒島求生

你是一名1960年代IBM計算機中心的工程師,你每天都在面對一個棘手的問題:如何讓更多用戶能夠使用昂貴的System/360大型機。

這臺價值數(shù)百萬美元(相當于今天的數(shù)千萬美元)的龐然大物,是當時最先進的計算設備,但它的價格實在太昂貴了,即使是大型企業(yè)也很難獨自承擔。

而且這臺機器的用戶需要提前好幾天來登記使用時間,每次都只能為單個用戶服務,所有任務都在串行執(zhí)行。

當某個程序等待磁帶讀取時整個機器就會處于空閑狀態(tài),你體驗到的是時間和金錢的雙重流逝。

顯然你會想為什么當某個程序讀寫外部慢速設備時讓寶貴的CPU空閑呢?這就好比程序員在等待程序編譯完成時ta還可以去寫第二個需求的代碼啊,必須并行起來。

必須并行起來

要實現(xiàn)這一點程序必須具備暫停運行以及恢復運行的能力,要想讓程序具備暫停運行/恢復運行的能力就必須保存CPU上下文信息。

為此你必須定義一個結構體來保存處理器上下文信息:

structcontext?{
? ??uint32_t?eax, ebx, ecx, edx; ? ??// 通用寄存器
? ??uint32_t?esi, edi; ? ? ? ? ? ? ??// 源/目標變址寄存器
? ??uint32_t?esp, ebp; ? ? ? ? ? ? ??// 棧指針和基址指針
? ??uint32_t?eip; ? ? ? ? ? ? ? ? ? ?// 指令指針
? ??uint32_t?eflags; ? ? ? ? ? ? ? ??// 標志寄存器
? ??uint16_t?cs, ds, es, fs, gs, ss;?// 段寄存器
};

每個運行起來的任務都需要這樣一個結構體,當任務需要暫停時就把處理器上下文保存在context結構體中,需要恢復任務運行時就根據(jù)context中數(shù)據(jù)恢復處理器狀態(tài)。

現(xiàn)在你就可以同時運行多個任務了,當任務A讀取慢速磁帶時就暫停任務A的運行并把CPU分配給任務B,這樣你可以充分利用寶貴的機器資源。

多個程序相互干擾

當系統(tǒng)中可以運行多個任務后你發(fā)現(xiàn)了新的問題,那就是多個程序之間會相互干擾,因為在早期計算機系統(tǒng)中,程序被鏈接到固定的內存基址,且加載器缺乏重定位能力。當多個程序加載到內存時,程序中的變量可能被分配到相同的物理地址,導致互相覆蓋。

舉個例子:

// program1.c
int?global_data =?100; ?// 全局變量

intmain(){
? ??while(1) {
? ? ? ? global_data++; ?// 不斷增加全局變量的值
? ? ? ? ...
? ? }
? ??return0;
}

// program2.c
int?global_data =?100; ?// 同名全局變量

intmain(){
? ??while(1) {
? ? ? ? global_data--; ?// 不斷減少全局變量的值
? ? ? ? ...
? ? }
? ??return0;
}

這個示例中兩個同時運行的程序global_data變量的內存地址可能相同,因此兩個程序的運行會相互干擾,原因你很清楚,因為它們共享同一個內存空間,你開始意識到,僅僅依靠程序員的自覺來避免互相干擾是不夠的,需要從系統(tǒng)層面提供隔離機制

于是,你開始設計一個新的抽象概念,讓各個運行的程序彼此隔離,為每個程序提供獨立的內存空間,你決定采用段氏內存管理,每個運行的程序中的各個段都有自己的內存區(qū)域:

structmemory_map?{
? ??uint32_t?code_segment; ? ?// 代碼段起始地址
? ??uint32_t?code_size; ? ? ??// 代碼段大小

? ??uint32_t?data_segment; ? ?// 數(shù)據(jù)段起始地址
? ??uint32_t?data_size; ? ? ??// 數(shù)據(jù)段大小
? ??
? ??uint32_t?stack_segment; ??// 棧段起始地址
? ??uint32_t?stack_size; ? ? ?// 棧段大小
};

進程誕生了

現(xiàn)在你設計了struct context以及struct memory_map,顯然它們都屬于某一個運行起來的程序,“運行起來的程序”是一個新的概念,你給起了個名字叫做進程,process,現(xiàn)在進程上下文以及內存映射都可以放到進程這個結構體中:

structprocess?{
??structcontextctx;
??structmemory_mapmem;
};

就這樣你實現(xiàn)了操作系統(tǒng)最核心的功能:多任務。

進程這種設計效果嗷嗷好:

  • 用戶程序再也不會意外修改其他程序的數(shù)據(jù)

  • 可以同時運行多個程序,在它們之間來回切換

  • 即使一個程序崩潰,也不會影響其他程序的運行

不過,新的挑戰(zhàn)也隨之而來...

進程切換的性能瓶頸

多任務系統(tǒng)的使用解決了多用戶共享計算機的問題。但很快,你就發(fā)現(xiàn)了一個令人頭疼的新問題:隨著系統(tǒng)中運行的進程越來越多,整個系統(tǒng)的響應速度開始明顯下降。

通過仔細觀察和測試,你發(fā)現(xiàn)問題出在進程切換上。每次從一個進程切換到另一個進程時,系統(tǒng)都需要執(zhí)行大量的工作。

看一下你實現(xiàn)的進程:

structprocess?{
??structcontextctx;
??structmemory_mapmem;
};

進程切換時處理器上下文和內存映射都需要切換,尤其對于現(xiàn)代操作系統(tǒng)中的頁式內存管理來說內存映射切換的開銷非常高(CR3切換、TLB刷新等)。

是否有必要創(chuàng)建過多進程?

真的有必要創(chuàng)建這么多進程嗎?你仔細檢查了一個開啟大量進程的web服務器,web服務器會創(chuàng)建多個工作進程來處理不同的HTTP請求,這些工作進程運行完全相同的代碼來處理請求,卻各自占用一份獨立的內存空間,同時這些進程在切換時又會帶來大量開銷。

但是等等,既然這些進程使用的是相同的代碼,為什么不能讓它們共享這部分內存呢?你開始意識到,也許可以創(chuàng)造一種新的執(zhí)行單元,它們能共享進程的大部分資源,同時又保持足夠的獨立性,如果多個執(zhí)行流可以共享同一個進程的資源,那切換的開銷不就能大大降低了嗎?

這個想法最終引導你走向了一個全新的概念。

線程概念的誕生

經過反復設計,你找到了一個突破性的解決方案:同一個進程內部支持多個執(zhí)行流。這個想法來源于一個關鍵觀察 ,很多時候,我們其實并不需要完全獨立的進程,只需要能夠并行執(zhí)行不同的任務就夠了。

于是,你設計了一個全新的概念 —— 線程。每個線程都是進程內的一個獨立執(zhí)行單元,它們:

  1. 共享進程的地址空間,這意味著所有線程可以直接訪問相同的內存區(qū)域

  2. 共享打開的文件描述符,避免了重復打開關閉文件的開銷

  3. 共享其他系統(tǒng)資源,如信號處理函數(shù)、進程工作目錄等

  4. 僅維護獨立的執(zhí)行棧和寄存器狀態(tài),確保每個線程可以獨立執(zhí)行

這就是線程的誕生故事,它完美平衡了資源共享和執(zhí)行獨立性,是操作系統(tǒng)發(fā)展史上一個重要的里程碑。

?

閱讀原文:原文鏈接


該文章在 2025/4/3 17:37:56 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品欧美视频另类专区 | 国产成人调教视频在线观看 | 国产精品合集久久久久青苹果 | 精品动漫无码在线一区二区三区 | av在线播放网址 | 国产精品视频一区国模私拍丝袜 | 国产精品成人av在线观看 | 国产午夜福利免费不卡在线观看 | 国产亚洲日韩激情视濒 | av无码东京热亚洲男人的天堂 | 国产成人综合亚洲av小说 | 国产av一区二区三区水牛 | 国产午夜精品理论片 | 国产成年无码aⅴ片在线韩国 | 国产福利片免费在线 | av中文无码 | 91毛片下载网站 | 东京一本大道无码 | 国产原创中文精品经理篇 | 国产av熟女| 国产91在线91精品观看 | 国产极品乱码在线观看www | 国产精品一级毛片不卡视 | 国产麻豆剧传媒 | 国产精品一区二区高清久久久 | 丰满的少妇愉情hd高清果冻传媒 | 国产成人调教在线视频 | 国产欧美日韩一区二区刘玥 | 国产午夜免费啪视频观看视频 | 国产成人亚洲精品电影在线观看 | 国产精品一区二区麻豆亚洲 | 2025亚洲中文字幕在线第99 | 91与国产超碰在线手机观看 | 国产一区二区精品高清 | 国产欧美日韩麻豆91 | 国产精品日本一区二区不卡视频 | 国产精品日韩欧美在线观看 | 国产激情久久久久影院蜜桃av | 高清色黄毛片一级毛片 | 国产av秘无码一区区三区 | 国产熟睡乱子伦午夜视频 |