后台开发人员面试内容——操作系统(一)
?
操作系統
并發編程的3個基本概念
1.原子性:即一個操作或者多個操作 要么全部執行并且執行的過程不會被任何因素打斷,要么就都不執行
2.可見性:指當多個線程訪問同一個變量時,一個線程修改了這個變量的值,其他線程能夠立即看得到修改的值
3.有序性:即程序執行的順序按照代碼的先后順序執行。
?
同步和異步
1.同步就是一個任務的完成需要依賴另外一個任務時,只有等待被依賴的任務完成后,依賴的任務才能算完成,這是一種可靠的任務序列。要么成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。
2.異步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什么工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了。至于被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列
?
volatile
volatile是Java提供的一種輕量級的同步機制,當寫一個 volatile 變量時,JMM 會把該線程對應的本地內存中的共享變量值刷新到主內存。當讀一個 volatile 變量時,JMM 會把該線程對應的本地內存置為無效。線程接下來將從主內存中讀取共享變量。
1.保證可見性,不保證原子性
a.當寫一個volatile變量時,JMM會把該線程本地內存中的變量強制刷新到主內存中去;
b.這個寫會操作會導致其他線程中的緩存無效。
2.禁止指令重排
?????重排序是指編譯器和處理器為了優化程序性能而對指令序列進行排序的一種手段。重排序需要遵守一定:
a.重排序操作不會對存在數據依賴關系的操作進行重排序。
比如:a=1;b=a; 這個指令序列,由于第二個操作依賴于第一個操作,所以在編譯時和處理器運
?????行時這兩個操作不會被重排序。
? ? ?b.重排序是為了優化性能,但是不管怎么重排序,單線程下程序的執行結果不能被改變
?
死鎖
兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象
?
樂觀鎖和悲觀鎖
1.樂觀鎖:就像它的名字一樣,對于并發間操作產生的線程安全問題持樂觀狀態,樂觀鎖認為競爭不總是會發生,因此它不需要持有鎖,將比較-替換這兩個動作作為一個原子操作嘗試去修改內存中的變量,如果失敗則表示發生沖突,那么就應該有相應的重試邏輯。
2.悲觀鎖:還是像它的名字一樣,對于并發間操作產生的線程安全問題持悲觀狀態,悲觀鎖認為競爭總是會發生,因此每次對某資源進行操作時,都會持有一個獨占的鎖,就像synchronized,不管三七二十一,直接上了鎖就操作資源了
synchronized是悲觀鎖,屬于搶占式,會引起其他線程阻塞。
volatile提供多線程共享變量可見性和禁止指令重排序優化
CAS是基于沖突檢測的樂觀鎖(非阻塞)
?
多線程同步
Synchronized關鍵字;
Lock鎖實現;
分布式鎖等
?
進程與線程的區別
1.進程是資源分配最小單位,線程是程序執行的最小單位;
2.進程有自己獨立的地址空間,每啟動一個進程,系統都會為其分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,線程沒有獨立的地址空間,它使用相同的地址空間共享數據;
3.CPU切換一個線程比切換進程花費小;
4.創建一個線程比進程開銷小;
5.線程占用的資源要?進程少很多。
6.線程之間通信更方便,同一個進程下,線程共享全局變量,靜態變量等數據,進程之間的通信需要以通信的方式(IPC)進行;(但多線程程序處理好同步與互斥是個難點)
7.多進程程序更安全,生命力更強,一個進程死掉不會對另一個進程造成影響(源于有獨立的地址空間),多線程程序更不易維護,一個線程死掉,整個進程就死掉了(因為共享地址空間);
8.進程對資源保護要求高,開銷大,效率相對較低,線程資源保護要求不高,但開銷小,效率高,可頻繁切換;
?
進程調度算法
1.先來先服務調度算法。
2.短作業(進程)優先調度算法。
3. 優先權調度算法。
4. 高響應比優先調度算法。
?
磁盤調度算法
例:假定某磁盤共有200個柱面,編號為0-199,如果在為訪問143號柱面的請求者服務后,當前正在為訪問125號柱面的請求服務,同時有若干請求者在等待服務,它們每次要訪問的柱面號為?? 86,147,91,177,94,150,102,175,130
1、先來先服務算法(FCFS)First Come First Service
這是一種比較簡單的磁盤調度算法。它根據進程請求訪問磁盤的先后次序進行調度。此算法的優點是公平、簡單,且每個進程的請求都能依次得到處理,不會出現某一進程的請求長期得不到滿足的情況。此算法由于未對尋道進行優化,在對磁盤的訪問請求比較多的情況下,此算法將降低設備服務的吞吐量,致使平均尋道時間可能較長,但各進程得到服務的響應時間的變化幅度較小。
先來先服務?(125)86.147.91.177.94.150.102.175.130
?2、最短尋道時間優先算法(SSTF) Shortest Seek Time First
該算法選擇這樣的進程,其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,該算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對用戶的服務請求的響應機會不是均等的,因而導致響應時間的變化幅度很大。在服務請求很多的情況下,對內外邊緣磁道的請求將會無限期的被延遲,有些請求的響應時間將不可預期。
最短尋道時間優先(125)130.147.150.175.177.102.94.91.86
?3、掃描算法(SCAN)電梯調度
掃描算法不僅考慮到欲訪問的磁道與當前磁道的距離,更優先考慮的是磁頭的當前移動方向。例如,當磁頭正在自里向外移動時,掃描算法所選擇的下一個訪問對象應是其欲訪問的磁道既在當前磁道之外,又是距離最近的。這樣自里向外地訪問,直到再無更外的磁道需要訪問才將磁臂換向,自外向里移動。這時,同樣也是每次選擇這樣的進程來調度,即其要訪問的磁道,在當前磁道之內,從而避免了饑餓現象的出現。由于這種算法中磁頭移動的規律頗似電梯的運行,故又稱為電梯調度算法。此算法基本上克服了最短尋道時間優先算法的服務集中于中間磁道和響應時間變化比較大的缺點,而具有最短尋道時間優先算法的優點即吞吐量較大,平均響應時間較小,但由于是擺動式的掃描方法,兩側磁道被訪問的頻率仍低于中間磁道。
電梯調度(125)102.94.91.86.130.147.150.175.177
?4、循環掃描算法(CSCAN)
循環掃描算法是對掃描算法的改進。如果對磁道的訪問請求是均勻分布的,當磁頭到達磁盤的一端,并反向運動時落在磁頭之后的訪問請求相對較少。這是由于這些磁道剛被處理,而磁盤另一端的請求密度相當高,且這些訪問請求等待的時間較長,為了解決這種情況,循環掃描算法規定磁頭單向移動。例如,只自里向外移動,當磁頭移到最外的被訪問磁道時,磁頭立即返回到最里的欲訪磁道,即將最小磁道號緊接著最大磁道號構成循環,進行掃描。
循環掃描 (125)130.147.150.175.177.86.91.94.102
?
?
總結
以上是生活随笔為你收集整理的后台开发人员面试内容——操作系统(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hashmap实现倒排索引——查询多个单
- 下一篇: 后台开发人员面试内容——数据库(二)