編譯系統8大組成
❶ 編譯器是什麼。
1、 visual c++6.0 (win8系統下不好用,C/C++)-Microsoft Visual C++ ;
2、 visual studio (2005、2008、2010、2012、2013)- Microsoft Visual Studio ;
3、 win-tc非常方便:不騙你,2000/XP/7都可以用 ;
4、 Code::Blocks(win7、8都可以用);
5、 Turb C(只能編譯c語言) ;
6、 gcc (GNU編譯器套件) ;
7、 DEV C++;
8、 C-Free;
9、 Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、My Tc等,由於C語言比較成熟,所以編程環境很多;
10、還常用souceinsight ,在工作中還用Labwindows編程,直接調試運行,不過那是有工程背景,有工作經驗的技術人員用的。
❷ 編譯器支持的最大偏移地址是多少位
2位編譯器
char :1個位元組
char*(即指針變數): 4個字空侍核節(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理斗掘64位編譯器) short int : 2個位元組
int: 4個位元組
unsigned int : 4個位元組
float: 4個位元組
double: 8個位元組
long: 4個位元組
long long: 8個位元組
unsigned long: 4個位元組
[cpp] view plain
64位編譯器
char :1個位元組
char*(即指針變數): 8個位元組
short int : 2個位元組
int: 4個位元組
unsigned int : 4個位元組
float: 4個位元組
double: 8個字談橡節
long: 8個位元組
long long: 8個位元組
❸ 深入理解計算機系統的目錄2
第1章計算機系統漫遊1
1.1信息就是位+上下文1
1.2程序被其他程序翻譯成不同的格式3
1.3了解編譯系統如何工作是大有益處的4
1.4處理器讀並解釋存儲在存儲器中的指令5
1.4.1系統的硬體組成5
1.4.2運行hello程序7
1.5高速緩存至關重要7
1.6存儲設備形成層次結構9
1.7操作系統管理硬體10
1.7.1進程11
1.7.2線程12
1.7.3虛擬存儲器12
1.7.4文件13
1.8系統之間利用網路通信13
1.9重要主題15
1.9.1並發和並行15
1.9.2計算機系統中抽象的重要性17
1.10小結17
參考文獻說明18
.第一部分程序結構和執行
第2章信息的表示和處理20
2.1信息存儲22
2.1.1十六進製表示法22
2.1.2字25
2.1.3數據大小25
2.1.4定址和位元組順序26
2.1.5表示字元串31
2.1.6表示代碼31
2.1.7布爾代數簡介32
2.1.8c語言中的位級運算34
2.1.9c語言中的邏輯運算36
2.1.10c語言中的移位運算36
2.2整數表示38
2.2.1整型數據類型38
2.2.2無符號數的編碼39
2.2.3補碼編碼40
2.2.4有符號數和無符號數之間的轉換44
2.2.5c語言中的有符號數與無符號數47
2.2.6擴展一個數字的位表示49
2.2.7截斷數字51
2.2.8關於有符號數與無符號數的建議52
2.3整數運算54
2.3.1無符號加法54
2.3.2補碼加法57
2.3.3補碼的非59
2.3.4無符號乘法60
2.3.5補碼乘法60
2.3.6乘以常數63
2.3.7除以2的冪64
2.3.8關於整數運算的最後思考67
2.4浮點數67
2.4.1二進制小數68
2.4.2ieee浮點表示70
2.4.3數字示例71
2.4.4舍入74
2.4.5浮點運算76
2.4.6c語言中的浮點數77
2.5小結79
參考文獻說明80
家庭作業80
練習題答案90
第3章程序的機器級表示102
3.1歷史觀點103
3.2程序編碼105
3.2.1機器級代碼106
3.2.2代碼示例107
3.2.3關於格式的註解109
3.3數據格式111
3.4訪問信息112
3.4.1操作數指示符112
3.4.2數據傳送指令114
3.4.3數據傳送示例116
3.5算術和邏輯操作118
3.5.1載入有效地址118
3.5.2一元操作和二元操作119
3.5.3移位操作120
3.5.4討論120
3.5.5特殊的算術操作122
3.6控制123
3.6.1條件碼124
3.6.2訪問條件碼125
3.6.3跳轉指令及其編碼127
3.6.4翻譯條件分支129
3.6.5循環132
3.6.6條件傳送指令139
3.6.7switch語句144
3.7過程149
3.7.1棧幀結構149
3.7.2轉移控制150
3.7.3寄存器使用慣例151
3.7.4過程示例152
3.7.5遞歸過程156
3.8數組分配和訪問158
3.8.1基本原則158
3.8.2指針運算159
3.8.3嵌套的數組159
3.8.4定長數組161
3.8.5變長數組163
3.9異質的數據結構164
3.9.1結構164
3.9.2聯合167
3.9.3數據對齊170
3.10綜合:理解指針172
3.11應用:使用gdb調試器174
3.12存儲器的越界引用和緩沖區溢出175
3.13x86-64:將ia32擴展到64位183
3.13.1x86-64的歷史和動因184
3.13.2x86-64簡介185
3.13.3訪問信息187
3.13.4控制192
3.13.5數據結構200
3.13.6關於x86-64的總結性評論200
3.14浮點程序的機器級表示201
3.15小結201
參考文獻說明202
家庭作業202
練習題答案212
第4章處理器體系結構230
4.1y86指令集體系結構231
4.1.1程序員可見的狀態231
4.1.2y86指令232
4.1.3指令編碼233
4.1.4y86異常237
4.1.5y86程序237
4.1.6一些y86指令的詳情241
4.2邏輯設計和硬體控制語言hcl242
4.2.1邏輯門243
4.2.2組合電路和hcl布爾表達式243
4.2.3字級的組合電路和hcl整數表達式245
4.2.4集合關系248
4.2.5存儲器和時鍾248
4.3y86的順序實現250
4.3.1將處理組織成階段250
4.3.2seq硬體結構258
4.3.3seq的時序259
4.3.4seq階段的實現262
4.4流水線的通用原理267
4.4.1計算流水線268
4.4.2流水線操作的詳細說明269
4.4.3流水線的局限性271
4.4.4帶反饋的流水線系統272
4.5y86的流水線實現273
4.5.1seq+:重新安排計算階段273
4.5.2插入流水線寄存器276
4.5.3對信號進行重新排列和標號277
4.5.4預測下一個pc279
4.5.5流水線冒險280
4.5.6用暫停來避免數據冒險283
4.5.7用轉發來避免數據冒險285
4.5.8載入/使用數據冒險288
4.5.9異常處理289
4.5.10pipe各階段的實現291
4.5.11流水線控制邏輯297
4.5.12性能分析305
4.5.13未完成的工作306
4.6小結308
參考文獻說明309
家庭作業309
練習題答案314
第5章優化程序性能324
5.1優化編譯器的能力和局限性325
5.2表示程序性能328
5.3程序示例330
5.4消除循環的低效率332
5.5減少過程調用336
5.6消除不必要的存儲器引用336
5.7理解現代處理器340
5.7.1整體操作340
5.7.2功能單元的性能343
5.7.3處理器操作的抽象模型344
5.8循環展開348
5.9提高並行性351
5.9.1多個累積變數351
5.9.2重新結合變換354
5.10優化合並代碼的結果小結358
5.11一些限制因素359
5.11.1寄存器溢出359
5.11.2分支預測和預測錯誤處罰360
5.12理解存儲器性能363
5.12.1載入的性能363
5.12.2存儲的性能364
5.13應用:性能提高技術369
5.14確認和消除性能瓶頸369
5.14.1程序剖析370
5.14.2使用剖析程序來指導優化371
5.14.3amdahl定律374
5.15小結375
參考文獻說明375
家庭作業376
練習題答案378
第6章存儲器層次結構382
6.1 存儲技術382
6.1.1隨機訪問存儲器383
6.1.2磁碟存儲389
6.1.3固態硬碟398
6.1.4存儲技術趨勢399
6.2局部性401
6.2.1對程序數據引用的局部性402
6.2.2取指令的局部性403
6.2.3局部性小結403
6.3存儲器層次結構405
6.3.1存儲器層次結構中的緩存406
6.3.2存儲器層次結構概念小結408
6.4高速緩存存儲器408
6.4.1通用的高速緩存存儲器結構409
6.4.2直接映射高速緩存410
6.4.3組相聯高速緩存416
6.4.4全相聯高速緩存418
6.4.5有關寫的問題420
6.4.6一個真實的高速緩存層次結構的解剖421
6.4.7高速緩存參數的性能影響422
6.5編寫高速緩存友好的代碼423
6.6綜合:高速緩存對程序性能的影響426
6.6.1存儲器山426
6.6.2重新排列循環以提高空間局部性430
6.6.3在程序中利用局部性433
6.7小結433
參考文獻說明434
家庭作業434
練習題答案442
第二部分在系統上運行程序
第7章鏈接448
7.1編譯器驅動程序449
7.2靜態鏈接450
7.3目標文件450
7.4可重定位目標文件451
7.5符號和符號表452
7.6符號解析454
7.6.1鏈接器如何解析多重定義的全局符號455
7.6.2與靜態庫鏈接457
7.6.3鏈接器如何使用靜態庫來解析引用460
7.7重定位461
7.7.1重定位條目461
7.7.2重定位符號引用462
7.8可執行目標文件465
7.9載入可執行目標文件466
7.10動態鏈接共享庫467
7.11從應用程序中載入和鏈接共享庫468
7.12與位置無關的代碼(pic)471
7.13處理目標文件的工具473
7.14小結473
參考文獻說明474
家庭作業474
練習題答案479
第8章異常控制流480
8.1異常481
8.1.1異常處理481
8.1.2異常的類別482
8.1.3linux/ia32系統中的異常484
8.2進程487
8.2.1邏輯控制流487
8.2.2並發流487
8.2.3私有地址空間488
8.2.4用戶模式和內核模式488
8.2.5上下文切換489
8.3系統調用錯誤處理491
8.4進程式控制制492
8.4.1獲取進程id492
8.4.2創建和終止進程492
8.4.3回收子進程495
8.4.4讓進程休眠499
8.4.5載入並運行程序500
8.4.6利用fork和execve運行程序502
8.5信號504
8.5.1信號術語505
8.5.2發送信號506
8.5.3接收信號509
8.5.4信號處理問題511
8.5.5可移植的信號處理516
8.5.6顯式地阻塞和取消阻塞信號517
8.5.7同步流以避免討厭的並發錯誤517
8.6非本地跳轉521
8.7操作進程的工具524
8.8小結524
參考文獻說明525
家庭作業525
練習題答案530
第9章虛擬存儲器534
9.1物理和虛擬定址535
9.2地址空間535
9.3虛擬存儲器作為緩存的工具536
9.3.1dram緩存的組織結構537
9.3.2頁表537
9.3.3頁命中538
9.3.4缺頁538
9.3.5分配頁面539
9.3.6又是局部性救了我們539
9.4虛擬存儲器作為存儲器管理的工具540
9.5虛擬存儲器作為存儲器保護的工具541
9.6地址翻譯542
9.6.1結合高速緩存和虛擬存儲器544
9.6.2利用tlb加速地址翻譯545
9.6.3多級頁表546
9.6.4綜合:端到端的地址翻譯547
9.7案例研究:intel core i7/linux存儲器系統550
9.7.1core i7地址翻譯551
9.7.2linux虛擬存儲器系統554
9.8存儲器映射556
9.8.1再看共享對象557
9.8.2再看fork函數558
9.8.3再看execve函數559
9.8.4使用mmap函數的用戶級存儲器映射559
9.9動態存儲器分配561
9.9.1malloc和free函數561
9.9.2為什麼要使用動態存儲器分配563
9.9.3分配器的要求和目標564
9.9.4碎片565
9.9.5實現問題565
9.9.6隱式空閑鏈表565
9.9.7放置已分配的塊567
9.9.8分割空閑塊567
9.9.9獲取額外的堆存儲器567
9.9.10合並空閑塊568
9.9.11帶邊界標記的合並568
9.9.12綜合:實現一個簡單的分配器570
9.9.13顯式空閑鏈表576
9.9.14分離的空閑鏈表576
9.10垃圾收集578
9.10.1垃圾收集器的基本知識579
9.10.2mark&sweep垃圾收集器580
9.10.3c程序的保守mark&sweep580
9.11c程序中常見的與存儲器有關的錯誤581
9.11.1間接引用壞指針582
9.11.2讀未初始化的存儲器582
9.11.3允許棧緩沖區溢出582
9.11.4假設指針和它們指向的對象是相同大小的583
9.11.5造成錯位錯誤583
9.11.6引用指針,而不是它所指向的對象583
9.11.7誤解指針運算584
9.11.8引用不存在的變數584
9.11.9引用空閑堆塊中的數據584
9.11.10引起存儲器泄漏585
9.12小結585
參考文獻說明586
家庭作業586
練習題答案589
第三部分程序間的交互和通信
第10章系統級i/o596
10.1unix i/o596
10.2打開和關閉文件597
10.3讀和寫文件598
10.4用rio包健壯地讀寫599
10.4.1rio的無緩沖的輸入輸出函數600
10.4.2rio的帶緩沖的輸入函數600
10.5讀取文件元數據604
10.6共享文件606
10.7i/o重定向608
10.8標准i/o609
10.9綜合:我該使用哪些i/o函數610
10.10小結611
參考文獻說明612
家庭作業612
練習題答案612
第11章網路編程614
11.1客戶端-伺服器編程模型614
11.2網路615
11.3全球ip網際網路618
11.3.1ip地址619
11.3.2網際網路域名620
11.3.3網際網路連接623
11.4套接字介面625
11.4.1套接字地址結構625
11.4.2socket函數626
11.4.3connect函數626
11.4.4open_clientfd函數627
11.4.5bind函數628
11.4.6listen函數628
11.4.7open_listenfd函數628
11.4.8accept函數629
11.4.9echo客戶端和伺服器的示例630
11.5web伺服器633
11.5.1web基礎633
11.5.2web內容633
11.5.3http事務634
11.5.4服務動態內容636
11.6綜合:tiny web伺服器639
11.7小結645
參考文獻說明645
家庭作業646
練習題答案646
第12章並發編程648
12.1基於進程的並發編程649
12.1.1基於進程的並發伺服器649
12.1.2 關於進程的優劣651
12.2基於i/o多路復用的並發編程651
12.2.1基於i/o多路復用的並發事件驅動伺服器653
12.2.2i/o多路復用技術的優劣657
12.3基於線程的並發編程657
12.3.1線程執行模型657
12.3.2posix線程658
12.3.3創建線程659
12.3.4終止線程659
12.3.5回收已終止線程的資源660
12.3.6分離線程660
12.3.7初始化線程660
12.3.8一個基於線程的並發伺服器661
12.4多線程程序中的共享變數662
12.4.1線程存儲器模型663
12.4.2將變數映射到存儲器663
12.4.3共享變數664
12.5用信號量同步線程664
12.5.1進度圖667
12.5.2信號量668
12.5.3使用信號量來實現互斥669
12.5.4利用信號量來調度共享資源670
12.5.5綜合:基於預線程化的並發伺服器674
12.6使用線程提高並行性676
12.7其他並發問題680
12.7.1線程安全680
12.7.2可重入性682
12.7.3在線程化的程序中使用已存在的庫函數682
12.7.4競爭683
12.7.5死鎖685
12.8小結687
參考文獻說明687
家庭作業688
練習題答案691
附錄a錯誤處理694
a.1unix系統中的錯誤處理694
a.2 錯誤處理包裝函數696
參考文獻698
❹ ls151和74hc151引腳圖是一樣嗎。
1、只是74hc151就行,不用管前綴和後綴。引腳圖如下。要了解更多的晶元數據,到網路文庫下載就行了。
2、ls151和74hc151引腳圖一樣嗎。MC74HC151的引腳排列與LS151完全相同。器件輸入與標准CMOS輸出兼容,帶有上拉電阻,與LSTTL輸出兼容。該器件選擇八個二進制數據輸入中的一個,由地址輸入決定。
3、如圖所示:用138實現序列:用時序信號加入地址端C、B、A,從G1或G2A、G2B輸入序列,從G1端輸入,在輸出得到的是反相信號(Y0~Y7),而從G2A、G2B輸入序列則可以在輸出得到同相序列信號。
4、數據選擇器74LS151D的引腳~G的作用是使能控制輸入腳,如下圖,可以理解為選片端。當兩片級聯使用組成16選1時,就由G腳實現選片,選前8個數據輸入時,第一片的G=0有效,被選中。
pcm編譯器系統實驗過程中發現的問題
1、本實驗模塊可以傳輸兩路話音信號。採用TP3057編譯器,它包括了圖9-1中的收、發低通濾波器及PCM編解碼器。編碼器輸入信號可以是本實驗模塊內部產生的正弦信號,也可以是外部信號源的正弦信號或電話信號。
2、PCM編碼器將模擬信號轉換成數字信號,並用二進制碼流進行表示。而PCM解碼器則將數字信號還原成原始模擬信號,以使其可以被音頻設備播放。
3、量化,就是把經過抽樣得到的瞬時值將其幅度離散,即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示,通常是用二進製表示。
4、PCM編解碼系統由哪些部分構成?各部分的作用是什麼?其中,低通濾波器:把話音信號帶寬限制為4KHz,把高於這個頻率的信號過濾掉。
74ls151的功能及原理
ls151的邏輯功能控制變數的每種取值組合對應選中一路輸入送至輸出,特點是價格便宜,功耗小,簡單。根據查詢相關公開信息:邏輯功能是從多路輸入中選中某一路送至輸出端,輸出對輸入的選擇受選擇控制量控制。
ls151引腳圖及功能:數據選擇器74LS151D的引腳~G的作用是使能控制輸入腳,如下圖,可以理解為選片端。當兩片級聯使用組成16選1時,就由G腳實現選片,選前8個數據輸入時,第一片的G=0有效,被選中。
典型的集成數據選擇器。74LS151有三個地址端A2A1A0。可選擇D0~D7八個數據,具有兩個互補輸出端W和。數據選擇器(dataselector)根據給定的輸入地址代碼,從一組輸入信號中選出指定的一個送至輸出端的組合邏輯電路。
74HC151的連接方式和各輸入端波形如圖所示,畫出輸出段端Y的波形_網路...
74HC151的連接方式和各輸入端波形如圖所示,畫出輸出段端Y的波形_網路...
用138實現序列:用時序信號加入地址端C、B、A,從G1或G2A、G2B輸入序列,從G1端輸入,在輸出得到的是反相信號(Y0~Y7),而從G2A、G2B輸入序列則可以在輸出得到同相序列信號。
設二極體為理想二極體,當Ⅴi≥-3時,Vo=-3v。當Ⅴ__-3時,Ⅴo=Ⅴi。波形圖如下描紅部分。
特性是電流小。74hc151輸出驅動電壓為5v,屬於低輸入電流。74hc151是單線輸出的多路模擬開關,從一組輸入信號中選出指定的一個送至輸出端的組合邏輯電路。
你圖看不清,我畫的圖中,假設輸入是5V的正弦信號,穩壓管是3V的話,當信號小於3V時,穩壓管沒有作用,輸出與輸入相同;當信號大於3V時候,輸出穩壓3V;當信號小於0時,穩壓管正向導通,和二極體一樣,所以輸出是0。
74ls151的邏輯功能和特點
ls151是常用的8選1數據選擇器,常用在各種數字電路和單片機系統的顯示系統中。其原理是輸出端根據3位地址ABC來選擇接通8個輸入端上。
ls153的邏輯功能是實現數據選擇功能,即把多路數據中的某一路數據傳送到公共數據線上,其作用相當於多個輸入的單刀多擲開關。74ls153是雙4選一數據選擇器。
ls151引腳圖及功能:數據選擇器74LS151D的引腳~G的作用是使能控制輸入腳,如下圖,可以理解為選片端。當兩片級聯使用組成16選1時,就由G腳實現選片,選前8個數據輸入時,第一片的G=0有效,被選中。
74ls151和74hc151引腳圖一樣嗎?
數據選擇器74LS151D的引腳~G的作用是使能控制輸入腳,如下圖,可以理解為選片端。當兩片級聯使用組成16選1時,就由G腳實現選片,選前8個數據輸入時,第一片的G=0有效,被選中。
LS151和74HC151都是8選1數據選擇器。74LS151是TTL器件,工作電源電壓是5V,74HC151是CMOS器件,工作電源電壓是2V-6V。兩種器件在工作電源電壓是5V時可互換。
工作電壓不同:LS只能用5V;而HC一般為2V到6V;CMOS器件抗靜電能力差,易發生栓鎖問題,所以CMOS的輸入腳不能直接接電源。
.不同的級別:LS是TTL級別;HC是COMS級別。CD代表標准4000系列3.不同的操作電壓:LS只適用於5V;HC通常是2V到6V;CMOS器件抗靜電能力差,容易出現插銷和鎖緊問題,導致CMOS的輸入管腳不能直接連接到電源上。
❺ 計算機操作系統知識點
計算機操作系統知識點
網路的神奇作用吸引著越來越多的用戶加入其中,正因如此,網路的承受能力也面臨著越來越嚴峻的考驗―從硬體上、軟體上、所用標准上......,各項技術都需要適時應勢,對應發展,這正是網路迅速走向進步的催化劑。下面是關於計算機操作系統知識點,希望大家認真閱讀!
4.1.1操作系統的概念
操作系統:是管理計算機軟硬體資源的程序,同時它又是用戶與計算機硬體的介面。
4.1.2操作系統的構成
進程管理、內存管衫凳理、文件管理、輸入/輸出系統管理、二級存儲管理、聯網、保護系統、命令解釋程序
4.2.1操作系統的類別
經過多年的發展,操作系統多種多樣。為提高大型計算機系統的資源利用率,操作系統從批處理,多道程序發展為分時操作系統。為了滿足計算機處理實時事件的需要,就有實時操作系統。為適應個人計算機系統的需要又出現了桌面操作系統。為適應並行系統的需要,就有了多處理器操作系統。為滿足網路和分布計算的需要,就有了網路操作系統和分布式操作系統。此外,還有為支持嵌入式計算機的嵌入式操作系統。
4.2.2計算環境
從計算機誕生至今,操作系統總是與具體的計算環境相聯系,它總是在某種計算環境中設置和使用,就目前來看計算環境可分為以下幾類:
1.傳統計算環境
指普通意義下的獨立或聯網工作的通用計算機所形成的計算環境。
2.基於Web的計算環境
互聯網的普及使得計算被延伸到Web環境。
3.嵌入式計算環境
嵌入式計算機就是安裝在某些設備上的計算部件,其計算相對比較簡單。
4.3.1進程的概念
什麼是進程?它與程序有什麼區別?
程序:用戶為完成某一個特定問題而編寫的操作步驟。
進程:可以簡單地被看作是正在執行的程序。但是進程需要一定的資源來完成它的任務(例如CPU時間、內存、文件和I/O設備)。
進程與程序的區別在於進程是動態的、有生命力的,而程序是靜態的。一個程序載入到內存,系統就創建一個進程,程序執行結束後,該進程也就消亡了。
在計算機中,由於多個程序共享系統資源,就必然引發對CPU的爭奪。如何有效地利用CPU資源,如何在多個請求CPU的進程中選擇取捨,這就是進程管理要解決的問題。
4.3.3進程式控制制塊PCB(略)
為了控制進程,操作系統就必須知道進程存儲在哪裡,以及進程的一些屬性。
進程式控制制塊是進程實體的一部老猜分,是操作系統中記錄進程的專用數據結構。一個新的進程創建時,操作系統就會為該進程建立一個進程式控制制塊。操作系統根據進程式控制制塊對並發進程進行控制。
4.3.4進程調度及隊列圖
計算機採用多道程序的目的是使得計算機系統無論何時都有進程運行,單處理器的計算機在某一時刻CPU只能運行一個進程,如果存在多個進程,其它進程就需要等待CPU空閑時才能被調度執行。
當一個進程處於等待或CPU時間片用完時,操作系統就會從該進程中拿走CPU控制權,然後再交給其它進程使用,這就是進程的調度。
4.3.5CPU調度及其准則
在設計CPU調度程序時主要應該考慮的准則包括:
(1)CPU使用率。讓CPU盡可能地忙。
(2)吞吐量。讓CPU在一定時間內完成的進程數盡可能多。
(3)周轉時間。讓進程從提交到運行完成的時間盡可能短。
(4)等待時間。讓進程在就緒隊列中等待所花時間之和盡可能短。
(5)響或含旅應時間。讓進程從提交請求到產生第一響應之間的時間盡可能短。
主要的CPU調度演算法
1、先到先服務
2、最短作業優先
3、優先權
4、輪轉
5、多級隊列
6、多級反饋隊列
4.3.7進程的同步與互斥
進程的同步就是指相互協作的進程不斷調整它們之間的相對速度,以實現共同有序地推進。
換句話說,在操作系統中,允許多個進程並發運行。然而,有些進程之間本身存在某種聯系,它們在系統中需要一種協作,以保證進程能正確有序地執行並維護數據的一致性。
在操作系統中,可能存在著多個進程。而系統中一些資源一次只允許一個進程使用,這類資源被稱為臨界資源。在進程中訪問臨界資源的那段程序稱為臨界區。當一個進程進入臨界區執行時,其它進程就不允許進入臨界區執行,否則就會導致錯誤結果。由此得出:
多個進程並發執行時,只允許一個進程進入臨界區運行,這就是進程的互斥。
例如:多個進程在競爭使用列印機時表現為互斥。
一個文件可供多個進程共享,其中有一個進程在寫操作時,其它進程則不允許同時寫或讀,表現為互斥。
4.3.8進程的死鎖及處理方法
在多道程序設計中,多個進程可能競爭一定數量的資源。一個進程在申請資源時,如果所申請資源不足,該進程就必須處於等待狀態。如果所申請的資源被其它進程佔有,那麼進程的等待狀態就可能無法改變,從而形成進程之間相互一直等待的局面,這就是死鎖。
競爭資源引起死鎖
引起死鎖的四個必要條件:
互斥:任一時刻只能有一個進程獨占某一資源,若另一進程申請該資源則需延遲到該資源釋放為止。
佔有並等待:即該進程佔有部分資源後還在等待其它資源,而該資源被其它進程佔有。
非搶占:某進程已佔用資源且不主動放棄它所佔有的資源時,其它進程不能強占該資源,只有等其完成任務並釋放資源。
循環等待:在出現死鎖的系統中,一定存在這樣一個進程鏈,其中每個進程至少佔有其它進程所必需的資源,從而形成一個等待鏈。
處理死鎖問題的三種方式:
可使用協議預防和避免死鎖,確保系統從不會進入死鎖狀態。
可允許系統進入死鎖狀態,然後檢測出死鎖狀態,並加以恢復。
可忽略進程死鎖問題,並假裝系統中死鎖從來不會發生。即沒有必要把精力花在小概率事件上。
處理死鎖優先考慮的順序:先預防和避免再檢測和恢復
4.4內存管理
內存是現代操作系統的核心。內存用於容納操作系統和各種用戶進程,是可以被CPU和I/O設備所共同訪問的數據倉庫。計算機的所有程序運行時都要調入內存。
內存管理的主要工作是:為每個用戶進程合理地分配內存,以保證各個進程之間在存儲區不發生沖突;當內存不足時,如何把內存和外存結合起來,給用戶提供一個比實際內存大得多的虛擬內存,使得程序能順利執行。內存管理包括內存分配、地址映射、內存保護和擴充。
4.4.1用戶程序執行與地址映射
用戶編寫程序在執行前,需要多個處理步驟,這些步驟可將源程序轉變為二進制機器代碼,然後在內存中等待執行。當然有時並非每個步驟都是必需的。
通常,將指令和數據的.地址映射成內存地址可以發生在以下三個執行階段。(了解)
1.編譯階段:如果在編譯時就知道進程將在內存中的什麼位置駐留,那麼編譯器就可以直接以生成絕對地址代碼。
2.載入階段:不知道進程將駐留在什麼位置,那麼編譯器就必須生成程序的邏輯地址,在載入階段再轉變成內存的絕對地址。
3.執行階段:如果進程在執行時可以從一個內存段移動到另一個內存段,那麼進程的絕對地址映射工作只能延遲到執行時進行。
4.4.2物理地址空間與邏輯地址空間
物理地址:是計算機內存單元的真實地址。
物理地址空間:由物理地址所構成的地址范圍。
邏輯地址:用戶程序地址,從0開始編址。
邏輯地址空間:由邏輯地址所構成的地址范圍。
地址映射:用戶程序在運行時要裝入內存,這就需要將邏輯地址變換成物理地址,這個過程稱為地址映射,也稱重定位。
用戶編寫的源程序是不考慮地址的,源程序經CPU編譯後產生邏輯地址。從CPU產生的邏輯地址轉換為內存中的物理地址的映射是由計算機中被稱為內存管理單元的硬體設備來實現的,將邏輯地址與內存管理單元中存放的內存基址相加就得到了物理地址。
4.4.3進程使用內存的交換技術
為了更加有效地使用內存,進程在不運行時,可以暫時從內存移至外存上,直到需要再運行時再重新調回到內存中。也就是說內存管理程序可將剛剛運行過的進程從內存中換出以釋放出佔用的內存空間,然後將另一個要運行的進程占據前者釋放的內存空間。
計算機工作時,為了將多個進程放入到內存就必須考慮在內存中如何放置這些進程。
4.4.4內存分配方案-連續
對於連續內存分配方案,開始時所有內存是一個大的孔,隨著內存分配的進行就會形成位置上不連續的大小不一的孔。在連續內存分配方案中,當新進程需要內存時,為其尋找合適的孔,實現內存分配。該方案為每個進程所分配的內存物理地址空間在位置上是連續的。
4.4.5內存分配方案-分頁式
分頁管理基本思想:
o內存物理地址空間劃分為若干個大小相等的塊(頁框)
o進程的邏輯地址空間也劃分為同樣大小的塊(頁面)
o內存分配時每個頁面對應地分配一個頁框,而一個進程所分得頁框在位置上不必是連續的。
頁表:操作系統為每個用戶程序建立一張頁表,該表記錄用戶程序的每個邏輯頁面存放在哪一個內存物理頁框。
4.5虛擬內存方案
虛擬內存是一個容量很大的存儲器的邏輯模型,它不是任何實際的物理存儲器,它一般是藉助硬碟來擴大主存的容量。
虛擬內存:對於一個進程來講,如果僅將當前要運行的幾個頁面裝入內存便可以開始運行,而其餘頁面可暫時留在磁碟上,待需要時再調入內存,並且調入時也不佔用新的內存空間,而是對原來運行過的頁面進行置換。這樣,就可以在計算機有限的內存中同時駐留多個進程並運行。而對用戶來講感覺到系統提供了足夠大的物理內存,而實際上並非真實的,這就是虛擬內存。
4.5.2頁面請求與頁面置換演算法
頁面請求:在虛擬內存技術中,進程運行時並沒有將所有頁面裝入到內存,在運行過程中進程會不斷地請求頁面,如果訪問的頁面已在內存,就繼續執行下去;但如果要訪問的頁面尚未調入到內存,便請求操作系統將所缺頁面調入內存,以便進程能繼續運行下去。
頁面置換:如果請求頁面調入內存時,分配給該進程的頁框已用完,就無法立即裝入所請求頁面。此時,必須將進程中的某個頁面從內存的頁框調出到磁碟上,再從磁碟上將所請求的頁面調入到內存的該頁框中。這個過程叫做頁面置換。
4.6文件管理
文件管理是操作系統最常見的組成部分。文件管理主要提供目錄及其文件的管理。
4.6.1文件的概念
文件:保存在外部存儲設備上的相關信息的集合。
文件命名:文件主名+擴展名
文件存取屬性:
只讀:只允許授權用戶進行讀操作。
讀寫:只允許授權用戶進行讀和寫的操作。
文檔:允許任何用戶進行讀寫操作。
隱藏:不允許用戶直接看到文件名。
文件系統:是對文件進行操作和管理的軟體,是用戶與外存之間的介面。這個系統將所有文件組織成目錄結構保存在外存,一個文件對應其中的一個目錄條。目錄條記錄有文件名、文件位置等信息。
操作系統對文件的基本操作包括:
創建文件、文件寫、文件讀、文件重定位、文件刪除、文件截短。
對文件的其它操作包括:文件復制、重命名、更改屬性等。
;❻ 為什麼自己編譯的linux內核和驅動比系統自帶的要大的多
1、配置中有很多調試選項(不一定帶「debug」字樣),而且位置也很分散;
2、發行版自帶內核往往經過長期、仔細的配置,會比個人十幾分鍾的配置更全面。
這兩個原因對內核及模塊的大小有影響,但不大。
編譯出的內核模塊中包含多個運行時用不到的段(編譯連接時可能要用,不是錯誤),發行版中一般會刪掉,這很有可能是原因所在。
可以考慮用 [strip -S mod_name.ko] 來處理一下內核模塊(注意:這里選項要用大寫S,小寫s或不寫會連符號表一起刪掉,導致模塊無法載入),看看文件有沒有變小(別對內核本身這么干)。
如果以上命令明顯減小了文件,可以考慮在編譯內核前定義環境變數INSTALL_MOD_STRIP為1(數字),這樣make moles_install後的內核模塊都是經 strip 處理過的了。