




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Oracle程序員面試分類模擬30簡答題1.
進程與線程有什么區別?正確答案:進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,它是系統進行資源分配和調度的一個獨立單位。例如,用戶運行(江南博哥)自己的程序,系統就創建一個進程,并為它分配資源,包括各種表格、內存空間、磁盤空間、I/O設備等,然后該進程被放入到進程的就緒隊列,進程調度程序選中它,為它分配CPU及其他相關資源,該進程就被運行起來。
線程是進程的一個實體,是CPU調度和分配的基本單位,線程基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器、一組寄存器和棧),但是它可以與同屬一個進程的其他的線程共享進程所擁有的全部資源。
在沒有實現線程的操作系統中,進程既是資源分配的基本單位,又是調度的基本單位,它是系統中并發執行的單元。而在實現了線程的操作系統中,進程是資源分配的基本單位,而線程是調度的基本單位,是系統中并發執行的單元。
需要注意的是,盡管線程與進程很相似,但兩者也存在著很大的不同,區別如下:
1)一個線程必定屬于也只能屬于一個進程;而一個進程可以擁有多個線程并且至少擁有一個線程。
2)屬于一個進程的所有線程共享該線程的所有資源,包括打開的文件、創建的Socket等。不同的進程互相獨立。
3)線程又被稱為輕量級進程。進程有進程控制塊,線程也有線程控制塊。但線程控制塊比進程控制塊小得多。線程之間切換代價小,進程之間切換代價大。
4)進程是程序的一次執行,線程可以理解為程序中一個程序片段的執行。
5)每個進程都有獨立的內存空間,而線程共享其所屬進程的內存空間。
程序、進程與線程的區別見下表。程序、進程與線程的區別名稱描述程序一組指令的有序結合,是靜態的指令,是永久存在的進程具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單元。進程的存在是暫時的,是一個動態概念線程線程一個實體,是CPU調度和的基本單元,是比進程更小的能獨立運行的基本單元。本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧)。一個線程可以創建和撤銷另-個線程,同一個進程中的多個線程之間可以并發執行
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。
2.
內核線程和用戶線程的區別?正確答案:根據操作系統內核是否對線程可感知,可以把線程分為內核線程和用戶線程。
內核線程的建立和銷毀都是由操作系統負責、通過系統調用完成的,操作系統在調度時,參考各進程內的線程運行情況做出調度決定。如果一個進程中沒有就緒狀態的線程,那么這個進程也不會被調度占用CPU資源。
和內核線程相對應的是用戶線程,用戶線程是指不需要內核支持而在用戶程序中實現的線程,其不依賴于操作系統核心,用戶進程利用線程庫提供創建、同步、調度和管理線程的函數來控制用戶線程。用戶線程多見于一些歷史悠久的操作系統,如UNIX操作系統,不需要用戶態/核心態切換,速度快,操作系統內核不知道多線程的存在,因此一個線程阻塞將使得整個進程(包括它的所有線程)阻塞。由于這里的處理器時間片分配是以進程為基本單位的,所以每個線程執行的時間相對減少。為了在操作系統中加入線程支持,采用了在用戶空間增加運行庫來實現線程,這些運行庫被稱為“線程包”,用戶線程是不能被操作系統所感知的。
3.
內存管理有哪幾種方式?正確答案:常見的內存管理方式有塊式管理、頁式管理、段式管理和段頁式管理。最常用的是段頁式管理。
(1)塊式管理把主存分為一大塊一大塊的,當所需的程序片斷不在主存時就分配一塊主存空間,把程序片段載入主存,就算所需的程序片段只有幾個字節也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的內存空間,但優點是易于管理。
(2)頁式管理用戶程序的地址空間被劃分成若干個固定大小的區域,這個區域被稱為“頁”,相應地,內存空間也被劃分為若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,從而實現了離散分配。這種方式的優點是頁的大小是固定的,因此便于管理;缺點是頁長與程序的邏輯大小沒有任何關系。這就導致在某個時刻一個程序可能只有一部分在主存中,而另一部分則在輔存中。這不利于編程時的獨立性,并給換入換出處理、存儲保護和存儲共享等操作造成麻煩。
(3)段式管理段是按照程序的自然分界劃分的并且長度可以動態改變的區域。使用這種方式,程序員可以把子程序、操作數和不同類型的數據和函數劃分到不同的段中。這種方式將用戶程序地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯信息。存儲分配時,以段為單位,段與段在內存中可以不相鄰接,也實現了離散分配。
分頁對程序員而言是不可見的,而分段通常對程序員而言是可見的,因而分段為組織程序和數據提供了方便,但是對程序員的要求也比較高。
分段存儲主要有如下優點:
1)段的邏輯獨立性不僅使其易于編譯、管理、修改和保護,也便于多道程序共享。
2)段長可以根據需要動態改變,允許自由調度,以便有效利用主存空間。
3)方便分段共享,分段保護,動態鏈接,動態增長。
分段存儲的缺點為:
1)由于段的大小不固定,因此存儲管理比較麻煩。
2)會生成段內碎片,這會造成存儲空間利用率降低。而且段式存儲管理比頁式存儲管理方式需要更多的硬件支持。
正是由于頁式管理和段式管理都有各種各樣的缺點,因此,為了把這兩種存儲方式的優點結合起來,才引入了段頁式管理。
(4)段頁式管理段頁式存儲組織是分段式和分頁式結合的存儲組織方法,這樣可充分利用分段管理和分頁管理的優點。
1)用分段方法來分配和管理虛擬存儲器。程序的地址空間按邏輯單位分成基本獨立的段,而每一段有自己的段名,再把每段分成固定大小的若干頁。
2)用分頁方法來分配和管理內存。即把整個主存分成與上述頁大小相等的存儲塊,可裝入作業的任何一頁。程序對內存的調入或調出是按頁進行的,但它又可按段實現共享和保護。
4.
什么是虛擬內存?正確答案:虛擬內存簡稱虛存,是計算機系統內存管理的一種技術。它是相對于物理內存而言的,可以理解為“假的”內存。它使得應用程序認為它擁有連續可用的內存(一個連續完整的地址空間),允許程序員編寫并運行比實際系統擁有的內存大得多的程序,這使得許多大型軟件項目能夠在具有有限內存資源的系統上實現。而實際上,它通常被分割成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。虛存比實存有以下好處:
1)擴大了地址空間。無論段式虛存,還是頁式虛存,或是段頁式虛存,尋址空間都比實存大。
2)內存保護。每個進程運行在各自的虛擬內存地址空間,互相不能干擾對方。另外,虛存還對特定的內存地址提供寫保護,可以防止代碼或數據被惡意篡改。
3)公平分配內存。采用了虛存之后,每個進程都相當于有同樣大小的虛存空間。
4)當進程需要通信時,可采用虛存共享的方式實現。
不過,使用虛存也是有代價的,主要表現在以下幾個方面的內容:
1)虛存的管理需要建立很多數據結構,這些數據結構要占用額外的內存。
2)虛擬地址到物理地址的轉換,增加了指令的執行時間。
3)頁面的換入換出需要磁盤I/O,這是很耗時間的。
4)如果一頁中只有一部分數據,會浪費內存。
5.
什么是內存碎片?什么是內碎片?什么是外碎片?正確答案:內存碎片是由于多次進行內存分配造成的,當進行內存分配時,內存格式一般為:(用戶使用段)(空白段)(用戶使用段),當空白段很小的時候可能不能提供給用戶足夠多的空間,比如夾在中間的空白段的大小為5,而用戶需要的內存大小6,這樣會產生很多的間隙造成使用效率的下降,這些很小的空隙稱為碎片。
內碎片:分配給程序的存儲空間沒有用完,有一部分是程序不使用,但其他程序也沒法用的空間。內碎片是處于區域內部或頁面內部的存儲塊,占有這些區域或頁面的進程并不使用這個存儲塊,而在進程占有這塊存儲塊時,系統無法利用它,直到進程釋放它,或進程結束時,系統才有可能利用這個存儲塊。
外碎片:由于空間太小,小到無法給任何程序分配(不屬于任何進程)的存儲空間。外部碎片是出于任何已分配區域或頁面外部的空閑存儲塊,這些存儲塊的總和可以滿足當前申請的長度要求,但是由于它們的地址不連續或其他原因,使得系統無法滿足當前申請。
內碎片和外碎片是一對矛盾體,一種特定的內存分配算法,很難同時解決好內碎片和外碎片的問題,只能根據應用特點進行取舍。
6.
虛擬地址、邏輯地址、線性地址、物理地址有什么區別?正確答案:虛擬地址是指由程序產生的由段選擇符和段內偏移地址組成的地址。這兩部分組成的地址并沒有直接訪問物理內存,而是要通過分段地址的變換處理后才會對應到相應的物理內存地址。
邏輯地址是指由程序產生的段內偏移地址。有時直接把邏輯地址當成虛擬地址,兩者并沒有明確的界限。
線性地址是指虛擬地址到物理地址變換之間的中間層,是處理器可尋址的內存空間(稱為線性地址空間)中的地址。程序代碼會產生邏輯地址,或者說是段中的偏移地址,加上相應段基址就生成了一個線性地址。如果啟用了分頁機制,那么線性地址可以再經過變換產生物理地址。若是沒有采用分頁機制,那么線性地址就是物理地址。
物理地址是指現在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終結果。
虛擬地址到物理地址的轉化方法是與體系結構相關的,一般有分段與分頁兩種方式。以x86CPU為例,分段、分頁都是支持的。內存管理單元負責從虛擬地址到物理地址的轉化。邏輯地址是段標識+段內偏移量的形式,MMU通過查詢段表,可以把邏輯地址轉化為線性地址。如果CPU沒有開啟分頁功能,那么線性地址就是物理地址;如果CPU開啟了分頁功能,MMU還需要查詢頁表來將線性地址轉化為物理地址:邏輯地址(段表)→線性地址(頁表)→物理地址。
映射是一種多對一的關系,即不同的邏輯地址可以映射到同一個線性地址上;不同的線性地址也可以映射到同一個物理地址上。而且,同一個線性地址在發生換頁以后,也可能被重新裝載到另外一個物理地址上,所以這種多對一的映射關系也會隨時間發生變化。
7.
Cache替換算法有哪些?正確答案:數據可以存放在CPU或者內存中。CPU處理快,但是容量少;內存容量大,但是轉交給CPU處理的速度慢。為此,需要Cache(緩存)來做一個折中。將最有可能調用的數據先從內存調入Cache,CPU再從Cache讀取數據,這樣會快許多。然而,Cache中所存放的數據不是全部有用的。CPU從Cache中讀取到有用數據稱為“命中”。
由于主存中的塊比Cache中的塊多,所以當要從主存中調一個塊到Cache中時,會出現該塊所映射到的一組(或一個)Cache塊已全部被占用的情況。此時,需要被迫騰出其中的某一塊,以接納新調入的塊,這就是替換。
Cache替換算法有RAND算法、FIFO算法、LRU算法、OPT算法和LFU算法。
(1)隨機(RAND)算法隨機算法就是用隨機數發生器產生一個要替換的塊號,將該塊替換出去,此算法簡單、易于實現,而且它不考慮Cache塊過去、現在及將來的使用情況。但是由于沒有利用上層存儲器使用的“歷史信息”、沒有根據訪存的局部性原理,故不能提高Cache的命中率,命中率較低。
(2)先進先出(FIFO)算法先進先出(FirstInFirstOut,FIFO)算法是將最先進入Cache的信息塊替換出去。FIFO算法按調入Cache的先后決定淘汰的順序,選擇最早調入Cache的字塊進行替換,它不需要記錄各字塊的使用情況,比較容易實現,系統開銷小,其缺點是可能會把一些需要經常使用的程序塊(如循環程序)也作為最早進入Cache的塊替換掉,而且沒有根據訪存的局部性原理,故不能提高Cache的命中率。因為最早調入的信息可能以后還要用到,或者經常要用到,如循環程序。此法簡單、方便,利用了主存的“歷史信息”,但并不能說最先進入的就不經常使用,其缺點是不能正確反映程序局部性原理,命中率不高,可能出現一種異常現象。例如,Solar—16/65機Cache采用組相連方式,每組4塊,每塊都設定一個兩位的計數器,當某塊被裝入或被替換時該塊的計數器清為0,而同組的其他各塊的計數器均加1,當需要替換時就選擇計數值最大的塊被替換掉。
(3)近期最少使用(LRU)算法近期最少使用(LeastRecentlyUsed,LRU)算法是將近期最少使用的Cache中的信息塊替換出去。
LRU算法是依據各塊使用的情況,總是選擇那個最近最少使用的塊被替換。這種方法雖然比較好地反映了程序局部性規律,但是這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。LRU算法相對合理,但實現起來比較復雜,系統開銷較大。通常需要對每一塊設置一個稱為計數器的硬件或軟件模塊,用以記錄其被使用的情況。
實現LRU策略的方法有多種,例如計數器法、寄存器棧法及硬件邏輯比較法等,下面簡單介紹計數器法的設計思路。
計數器方法:緩存的每一塊都設置一個計數器。計數器的操作規則如下:
1)被調入或者被替換的塊,其計數器清“0”,而其他的計數器則加“1”。
2)當訪問命中時,所有塊的計數值與命中塊的計數值要進行比較,如果計數值小于命中塊的計數值,則該塊的計數值加“1”;如果塊的計數值大于命中塊的計數值,則數值不變。最后將命中塊的計數器清“0”。
3)需要替換時,則選擇計數值最大的塊被替換。
(4)最優替換(OPT)算法使用最優替換(OPTimalreplacement,OPT)算法時必須先執行一次程序,統計Cache的替換情況。有了這樣的先驗信息,在第二次執行該程序時便可以用最有效的方式來替換,以達到最優的目的。
前面介紹的幾種頁面替換算法主要是以主存儲器中頁面調度情況的歷史信息為依據的,它假設將來主存儲器中的頁面調度情況與過去一段時間內主存儲器中的頁面調度情況是相同的,顯然,這種假設不總是正確的。最好的算法應該是選擇將來最久不被訪問的頁面作為被替換的頁面,這種替換算法的命中率一定是最高的,它就是最優替換算法。
要實現OPT算法,唯一的辦法是讓程序先執行一遍,記錄下實際的頁地址的使用情況。根據這個頁地址的使用情況才能找出當前要被替換的頁面。顯然,這樣做是不現實的。因此,OPT算法只是一種理想化的算法,然而它也是一種很有用的算法。實際上,經常把這種算法用來作為評價其他頁面替換算法好壞的標準。在其他條件相同的情況下,哪一種頁面替換算法的命中率與OPT算法最接近,那么它就是一種比較好的頁面替換算法。
(5)近期最少使用(LFU)算法近期最少使用(LeastFrequentlyUsed,LFU)算法選擇近期最少訪問的頁面作為被替換的頁面。顯然,這是一種非常合理的算法,因為到目前為止最少使用的頁面,很可能也是將來最少訪問的頁面。該算法既充分利用了主存中頁面調度情況的歷史信息,又正確反映了程序的局部特性。但是,這種算法實現起來非常困難,它要為每個頁面設置一個很長的計數器,并且要選擇一個固定的時鐘為每個計數器定時計數。在選擇被替換頁面時,要從所有計數器中找出一個計數值最大的計數器。
8.
庫函數調用與系統調用有什么不同?正確答案:庫函數調用是語言或應用程序的一部分,它是高層的,完全運行在用戶空間,為程序員提供調用真正的在幕后完成實際事務的系統調用接口。而系統函數是內核提供給應用程序的接口,屬于系統的一部分。函數庫調用是語言或應用程序的一部分,而系統調用是操作系統的一部分。
庫函數調用與系統調用的區別見下表。庫函數調用與系統調用的區別庫函數調用系統調用在所有的ANSIC編譯器版本中,C語言庫函數是相同的各個操作系統的系統調用是不同的它調用函數庫中的一段程序(或函數)它調用系統內核的服務與用戶程序相聯系是操作系統的一個入口點在用戶地址空間執行在內核地址空間執行它的運行時間屬于“用戶時間”它的運行屬于“系統時間”屬于過程調用,調用開銷較小需要在用戶空間和內核上下文環境間切換,開銷較大在C函數庫libc中有大約300個函數在Unix中有大約90個系統調用典型的C函數庫調用:system、fprintf和malloc等典型的系統調用:chdir、fork、write和brk等
庫函數調用通常比行內展開的代碼慢,因為它需要付出函數調用的時間耗費。但系統調用比庫函數調用還要慢很多,因為它需要把上下文環境切換到內核模式。
9.
靜態鏈接與動態鏈接有什么區別?正確答案:靜態鏈接是指把要調用的函數或者過程直接鏈接到可執行文件中,成為可執行文件的一部分。換句話說,函數和過程的代碼就在程序的.exe文件中,該文件包含了運行時所需的全部代碼。靜態鏈接的缺點是當
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025云南茶葉種植收購合同范本
- 2025《店鋪租賃經營合同示范文本》GF
- 2024年2月高層建筑消防無人機巡檢技術規范
- 《2025設備供應與安裝合同》
- 產品維修協議合同樣本
- led平板燈購銷合同標準文本
- 二 房交易合同樣本
- 明神醫健康管理服務承諾書二零二五年
- 借款融資居間服務合同標準文本
- 物流公司環境保護協議
- 3.28百萬農奴解放紀念日演講稿1500字2篇
- 員工節能環保培訓課件
- 《精益生產培訓》課件
- 學校招生工作培訓方案
- 訪談記錄表模板
- 初高中物理的區別以及如何學好高中物理課件
- 工程結構靜力試驗
- MQL4命令中文詳解手冊
- 國家開放大學《人文英語3》章節測試參考答案
- 撤銷冒名登記(備案)申請表
- 牛排培訓大全課件
評論
0/150
提交評論