操作系統知識點整理

作業

用戶在一次解題或一個事務處理過程中要求計算機系統所做工作的集合。它包括用戶程序、所需要的數據及控制命令等。作業是由一系列有序的步驟組成的。

進程

一個程序在一個數據集合上的一次運行過程。所以一個程序在不同數據集合上運行,乃至一個程序在同樣數據集合的多次運行都是不同的進程。

線程

線程是進程中的一個實體,是被系統獨立調度和執行的基本單位。

進程和線程的區別

進程是程序的一次執行。線程可以理解為進程中執行的一段程序片段。
進程是獨立的,這表現在內存空間、上下文環境上;線程運行在進程空間內。一般來講(不適用特殊技術),進程無法突破進程邊界存取其他進程內的存儲空間;而線程由于處于進程空間內,所以同一進程所產生的線程共享同一內存空間。
同一進程中的兩段代碼不能同時執行,除非引入線程。
線程是屬于進程的,當進程退出是該進程所產生的線程都會被強制退出并清除。線程占用的資源要少于進程所占用的資源。進程和線程都可以有優先級。
進程間可以通過IPC通信,但線程不可以。

管程

實際上定義了一個數據結構和在改數據結構上的能為并發進程所執行的一組操作,這組操作能同步進程和改變管程中的數據。

進行間的通信

現在最常用的進程間通信的方式有信號、信號量、消息隊列、共享內存。
所謂進程通信,就是不同進程之間進行一些“接觸”。這種接觸有簡單,也有復雜。機制不同,復雜度也不一樣。通信是一個廣義上的意義,不僅僅指傳遞一些message。它們的使用方法基本是相同的,所以只要掌握了一種使用方法,然后記住其他的使用方法就可以了。
信號和信號量是不同的,它們雖然都可用來實現同步和護士,但前者是使用信號處理器來進行的,后者是采用P、V操作來實現的。消息隊列是比較高級的一種進程間通信方法,因為它真的可以在進程間傳送message,連傳送一個“I seek you”都可以。
一個消息隊列可以被多個進程所共享(IPC就是在這個基礎上進行的),如果一個進程消息太多,一個消息隊列放不下,也可以用多于一個的消息隊列(不過可能管理會比較復雜)。共享消息隊列的進程所發送的消息中除了message本身外還有一個標志,這個標志可以指明該消息將由哪個進程護著是哪類進程接受。每一個共享消息隊列的進程針對這個隊列也有自己的標志,可以用來聲明自己的身份。

死鎖

死鎖是指兩個或兩個以上的進程在執行過程中。因爭奪資源而造成的互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖。
產生死鎖的四個必要條件如下:

  • 互斥條件:一個資源每次只能被一個進程使用。
  • 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
  • 不剝奪條件:進程已獲得的資源,在未使用完之前,不能強行剝奪。
  • 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
    這4個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

    死鎖的解除與預防方法:
    在系統設計、進程調度等方面注意如何不讓這4個必要條件成立,如何確定資源的合理分配方法,避免進程永久占據系統資源。此外,也要防止進程處于等待狀態的情況下占用資源,在系統運行過程中,對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,并根據檢查結果決定是都分配資源,若分配后系統可能發生死鎖,則不予分配,否則予以分配。因此,對資源的分配要給予合理的規劃。
    根據產生死鎖的4個必要條件,只要使其中之一不能成立,死鎖就不會出現。為此,可以采取下列3中預防措施:

  • 采用資源靜態分配策略,破壞“部分分配”條件 。

  • 允許進程剝奪使用其他進程占有的資源,從而破壞“不可剝奪”條件。
  • 采用資源有序分配閥,破壞“環路”條件。
    這里注意一點,互斥條件不能被破壞。
    避免死鎖的經典算法:銀行家算法。

內存管理

Windows內存管理方式主要分為:頁式管理、段式管理、段頁式管理。
頁式管理的基本原理是將進程的虛擬空間劃分成若干個長度相等的頁;頁式管理把內存空間按也得大小劃分成片或者頁面,然后把頁式虛擬地址與內存地址簡歷一一對應的頁表;并用相應的硬件地址變換機構來解決離散地址變換問題。頁式管理采用請求調頁或預調頁技術來實現內外存存儲器的統一管理。
優點:沒有外碎片,每個內碎片不超過也頁的大小。
缺點:程序全部裝入內存,要求有相應的硬件支持。例如地址變換機構缺頁終端的產生和選擇淘汰頁面等都要求有相應的硬件支持。這增加了機器成本,增加了系統的開銷。

段式管理的基本思想就是把程序按內容或過程函數關系分成算,每段有自己的名字。一個用戶作業或進程所包含的段對應一個二維線性虛擬空間,也就是一個二維虛擬存儲器。段式管理程序以段為單位分配內存,然后通過地址映射機構把算是虛擬地址轉換為實際內存物理地址。
優點:可以分別編寫和編譯,可以針對不同類型的段采取不同的保護,可以按段為單位來進行內存共享,包括動態鏈接進行代碼共享。
缺點:會產生碎片。

段頁式管理:為了實現段頁式管理,系統必須為每個作業或進程簡歷一張段表以管理內存分配與釋放、缺段處理等。另外由于一個段又被劃分成了若干頁。每個段又必須建立一張頁表以把段中的虛頁變換成內存中的實際頁面。顯然與也是管理時相同,頁表中也要有相應的實現缺頁中斷處理和頁面保護等功能的表項。
段頁式管理是段式管理和頁式管理方案相結合,所以具有兩者的優點。
但反過來說,由于管理軟件的增加,復雜性和開銷也就隨之增加了,另外需要的硬件以及占用的內存也有所增加,使得執行速度下降。

動態鏈接庫/靜態鏈接庫

目前以lib為后綴的庫有兩種,一種為靜態鏈接庫,另一種為動態鏈接庫(DLL)的導入庫。雖然靜態鏈接庫和動態鏈接庫的導入庫都是.lib文件,但是區別很大,他們實質是不一樣的東西。靜態庫本身就包含了實際執行代碼、地址符號表等等,而對于導入庫而言,其實際的執行代碼位于動態庫中,導入庫只包含了地址符號表等,確保程序找到對應函數的一些基本地址信息。
靜態鏈接庫是一個或者多個obj文件的打包,所以有人干脆把從obj文件生成lib的過程稱為Archive,即合并到一起。比如你鏈接一個靜態庫,如果其中有錯,它會準確地找到是哪個obj有錯,即靜態lib只是殼子。當我們的應用工程在使用靜態鏈接庫的時候,靜態鏈接庫要參與編譯,在生成執行文件之前的鏈接過程中,將靜態鏈接庫的全部指令直接連接入可執行文件中,故而,在可執行文件生成以后,靜態鏈接庫.lib文件即可以棄之不用。
動態鏈接庫(DLL)是作為共享函數庫的可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬于其可執行代碼的函數。函數的可執行代碼位于一個.dll文件中,該dll包含一個或多個已被編譯、鏈接并與使用它們的進程分開存儲的函數。DLL還有助于共享數據和資源。多個應用程序可同時訪問內存中單個dll副本內容。使用動態鏈接代替靜態鏈接有若干優點。dll節省內存,減少交換操作,節省磁盤空間,更易于升級(不需要重鏈接和長編譯),提供售后支持,提供擴展MFC庫類的機制,支持多語言程序。
靜態鏈接庫和動態鏈接庫都是共享代碼的方式,如果采用靜態鏈接庫,lib中的指令全部被直接包含在最終生成的exe文件中了。但是若使用dll(即動態鏈接庫),該dll不必被包含在最終的exe文件中,exe文件執行時可以“動態”地引用和卸載這個與exe獨立的dll文件,靜態鏈接庫和動態鏈接庫中還可以再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可再包含其他的動態或靜態鏈接庫。動態鏈接庫和靜態鏈接庫的使用不同之處在于它允許可執行模塊(.dll文件或.exe文件)僅包含在運行時定位dll函數的可執行代碼所需的信息。在靜態鏈接庫的使用中,鏈接器從靜態鏈接庫獲取所有被引用的函數,并將庫同代碼一起放到可執行文件中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386025.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【性能優化實戰】java驗證碼識別訓練

前言 今天剛好有空,跟大家聊聊如何學好算法進大廠。 前兩天一個讀者和我說,他堅持刷算法題2個月,薪資翻番去了他夢寐以求的大廠,期間面字節跳動還遇到了原題…其實據我所知目前國內的大廠和一些獨角獸,已經越來越效仿…

計算機網絡知識整理

OSI七層 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。 物理層涉及信道上傳輸的比特流。 數據鏈路層的主要任務是加強物理層傳輸原始比特流的功能,是指對應的網路層顯現為一條無錯線路。發送包把數據封裝在數據幀,按順序傳送出去并處…

吸水間最低動水位標高_體驗長安逸動EV460:再也不用為電動車續駛里程焦慮了...

文| 車突突車圖騰出品,未經許可,謝絕轉載● ● ●人們都在期待碧水藍天,而且越來越多的消費者也開始踐行環保理念,在買車時關注起了純電動汽車。不過遺憾的是,純電動汽車目前還沒能成為主流。一方面,是因為…

java開發工具包jdk包括哪些

害怕干不過SpringBoot?莫慌,我送你套神級pdf文檔 隨著 Spring Boot 使用越來越廣泛,Spring Boot 已經成為 Java 程序員面試的知識點,很多同學對 Spring Boot 理解不是那么深刻,經常就會被幾個連環追問就給干趴下了&am…

微信計步器怎么不計步_難以關閉的微信朋友圈廣告

太難關掉了。”試圖關閉朋友圈廣告的小曾,在對照著騰訊視頻上的一個長達6分鐘的視頻演示之后,通過14次操作才得以關閉。這14步操作具體如下:點擊“我”—點擊“設置”—點擊“關于微信”—點擊“微信隱私保護指引”—下拉兩個屏幕的面積—點擊…

java開發工具有哪些

前言 Netty 是一款基于 Java 的網絡編程框架,能為應用程序管理復雜的網絡編程、多線程處理以及并發。Netty 隱藏了樣板和底層代碼,讓業務邏輯保持分離,更加易于復用。使用 Netty 可以得到一個易于使用的 API,讓開發人員可以專注自…

經典冒泡排序及其優化

經典排序算法 - 冒泡排序Bubble sort 原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去后,最大或最小的數字被交換到了最后一位,然后再從頭開始進行兩兩比較交換,直到倒數第二位時結束,其余類似…

expdp導出 schema_記錄一則expdp任務異常處理案例

在XTTS遷移測試階段,遇到執行幾個expdp的導出任務,遲遲沒有返回任何信息,對應日志無任何輸出。環境:AIX 6.1 Oracle 10.2.0.4現象:在XTTS遷移測試階段,遇到執行幾個expdp的導出任務,遲遲沒有返…

java開發工具軟件排行榜

前言: 都說學歷是敲門磚,是一點都沒錯,即使是在重技術輕學歷的互聯網企業,面試官對于學歷越高的程序員初印象會更好,面試也會更順利,而大部分專科學歷的程序員,除非有過硬的技術,否…

簡單選擇排序算法

簡單選擇排序思想:首先,找到數組中最小的元素,其次,將它和數組第一個元素交換位置;再次,在剩下的元素中找到最小的元素,將它與數組中的第二個元素交換。如此亡故,直到將整個數組排序…

java開發工程師工作內容怎么寫

什么是分布式鎖?在回答這個問題之前,我們先回答一下什么是鎖。 普通的鎖,即在單機多線程環境下,當多個線程需要訪問同一個變量或代碼片段時,被訪問的變量或代碼片段叫做臨界區域,我們需要控制線程一個一個…

community 計算模塊度_光模塊深度:國內光模塊企業快速崛起

一、核心觀點二、發展追溯:技術是底蘊、創新是動力1 光通信發展:技術迭代加快,國產替代是前進的方向依據摩爾定律,光模塊的小型化、低成本以及高速率是產品迭代的主要方向。2 競爭格局:市場集中度高,巨頭地位穩固,國內廠商穩步崛起…

java開發工程師的自我評價

前言 京東到家訂單中心系統業務中,無論是外部商家的訂單生產,或是內部上下游系統的依賴,訂單查詢的調用量都非常大,造成了訂單數據讀多寫少的情況。 我們把訂單數據存儲在MySQL中,但顯然只通過DB來支撐大量的查詢是不…

華為魔術手機拆機圖解_華為P9進水不顯示維修案例

看點:iPhone X原裝屏與國產屏有哪些區別?看點:換7P、8P屏幕:C11和DTP和DKH的區別獅淘:華人手機維修師專屬工具集合店,不銹鋼拆機片5個只需9.9元!包郵山貓潮品:手機渠道直供&#xff…

java開發工程師自我介紹文本

前言 每年金三銀四,金九銀十之際,想進階夢想挑戰大廠的朋友層出不窮。 夢想是要有的,萬一就實現了呢?且撇開大牛們不說,每年面試之時問題也層出不窮,不得不說,每年被算法絕殺的朋友也是不在少數…

面向對象技術

面向對象和面向過程的區別 出發點不同。 面向對象強調問題域的要領直接映射到對象和對象之間的接口上,是用符合常規思維的方式來處理客觀世界的問題。 面向過程方法強調的則是過程的抽象化和模塊化,是以過程為中心構造或處理客觀世界問題的。層次邏輯…

ad09只在一定范圍內查找相似對象_23、面向對象編程

目錄:對象的概念類與對象面向對象編程類的定義與實例化屬性訪問類屬性與對象屬性屬性查找順序與綁定方法小結視頻鏈接一 對象的概念”面向對象“的核心是“對象”二字,而對象的精髓在于“整合“,什么意思?所有的程序都是由”數據”…

java開發工程師轉行可以做什么

前言 分布式事務主要解決分布式一致性的問題。說到底就是數據的分布式操作導致僅依靠本地事務無法保證原子性。與單機版的事務不同的是,單機是把多個命令打包成一個統一處理,分布式事務是將多個機器上執行的命令打包成一個命令統一處理。 MySQL 提供了…

atlas怎么看日志_億級的日志治理!微服務最佳方案,ELK stack從零搭建

ELK Stack 誕生背景一般我們需要進行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規模較大的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理…

Java變量類型

所有的變量在使用前必須聲明。 type identifier [ value][, identifier [ value] ...] ; 格式說明:type是數據類型,identifier是變量名,可以使用逗號隔開來聲明多個同類型變量。 一下列出一些變量的聲明實例,有些包含了初始化過…