軟件設(shè)計1
1、數(shù)據(jù)的表示
以H結(jié)尾的數(shù)字表示該數(shù)是 16進制的,比如C7FFFH
1.1、進制的轉(zhuǎn)換
1.1.1、將R進制轉(zhuǎn)10進制



1.1.2、將10進制轉(zhuǎn)換為R進制
10進制轉(zhuǎn)換為r進制數(shù)時,采用除r取余方法,即將十進制整數(shù)不斷除以r取余數(shù),直到商為0,所得的余數(shù)按逆序排列

1.1.3、二進制轉(zhuǎn)八進制和十六進制
二進制轉(zhuǎn)八進制可以將該二進制的數(shù)字從右到左,每三個為一組,一組轉(zhuǎn)換為一個八進制數(shù)即可。比如:10001110 轉(zhuǎn)為八進制為:216
二進制轉(zhuǎn)十六進制可以將二進制的數(shù)字從右到左,沒四個為一組,一組轉(zhuǎn)換為一個十六進制即可,大于10進制的數(shù),A表示10、B表示11、C表示12,以此類推。例如:10001110 轉(zhuǎn)為十六進制為:8E
1.2、原碼、反碼、補碼
原碼、反碼、補碼能表示的數(shù)據(jù)范圍如下:n 表示的是有多少位,1個字節(jié)有8位。
比如1個字節(jié),原碼范圍:-127~127;反碼:-127~127;補碼:-128~127。可以看到原碼和反碼表示的范圍是一樣的,而補碼比他們多了一個數(shù),這是因為原碼和反碼的 0 有兩種形式:0000 0000、1000 0000,而補碼的 0 都是:0000 0000。

1.2.1、原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 比如如果是8位二進制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進制數(shù)的取值范圍就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
1.2.2、反碼
正數(shù)的反碼和原碼一樣,負數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號位不變,其余各個位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可見如果一個反碼表示的是負數(shù), 人腦無法直觀的看出來它的數(shù)值. 通常要將其轉(zhuǎn)換成原碼再計算.
1.2.3、補碼
正數(shù)的補碼跟原碼一樣,負數(shù)的補碼是在其原碼的基礎(chǔ)上, 符號位不變, 其余各位取反, 最后再+1. (即在反碼的基礎(chǔ)上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
對于負數(shù), 補碼表示方式也是人腦無法直觀看出其數(shù)值的. 通常也需要轉(zhuǎn)換成原碼在計算其數(shù)值.
1.3、浮點數(shù)運算
浮點數(shù)其實就是數(shù)學(xué)中用科學(xué)計算法表示數(shù)字的方式,比如1000,可以表示為 1.0*103。
下面當(dāng)中,其中 1≤|M|<10

2、計算機結(jié)構(gòu)
2.1、CPU結(jié)構(gòu)
CPU由運算器和控制器組成
運算器:
算術(shù)邏輯單元(ALU):負責(zé)對數(shù)據(jù)進行算術(shù)和邏輯運算,暫時存儲計算結(jié)果等。
累加寄存器(AC):當(dāng)ALU執(zhí)行算術(shù)或是邏輯運算的時候,為ALU提供一個工作區(qū)。
數(shù)據(jù)緩沖寄存器(DR):對內(nèi)存進行讀寫操作時,用來暫存數(shù)據(jù)的。作為CPU和內(nèi)存,外圍設(shè)備之間數(shù)據(jù)的中轉(zhuǎn)站。是CPU和內(nèi)存,外圍設(shè)備之間在操作速度上的緩沖
狀態(tài)條件寄存器(PSW):存儲運算過程中相關(guān)的標(biāo)志,比如一些運算涉及到進位、溢出、中斷等待,涉及到一些狀態(tài)的信息。
控制器:
程序計數(shù)器PC:具有寄存信息和記數(shù)兩種功能,又稱為指令計數(shù)器。用來存放下一條指令所在的單位的地址的地方。
指令寄存器IR:當(dāng)CPU執(zhí)行一條指令時,先把它從內(nèi)存儲器取到指令緩存器中,再送入到指令寄存器中,然后經(jīng)過指令譯碼器的譯碼,從而產(chǎn)生各種微操作。
地址寄存器(AR):保存當(dāng)前CPU所訪問的內(nèi)存單元的地址,由于CPU和內(nèi)存在操作速度上的差異,所以需要使用AR保持地址信息,直到內(nèi)存的讀寫操作完成。
指令譯碼器(ID):指令譯碼器對指令的操作碼和地址碼進行解析,轉(zhuǎn)換成相應(yīng)的操作信號,控制各部件的工作,完成所需要的功能。

2.2、各種不同的計算機體系結(jié)構(gòu)分類

2.3、CISC和RISC指令系統(tǒng)的特點
CISC是計算機非常老舊時的指令系統(tǒng),一臺計算機可能就是專門為某個機構(gòu)定制的,指令多且復(fù)雜。
RISC適應(yīng)于大眾使用,指令簡化,追求高效率和簡單

3、流水線
執(zhí)行一條指令會分為:取指、分析、執(zhí)行三個步驟:
![]()

由于取指、分析、執(zhí)行三個步驟是由不同的部件完成的,所以第1 條執(zhí)行分析時,此時取指部件可以空余出來執(zhí)行第 2 條執(zhí)行的取指步驟。

3.1、流水線的周期和計算指令執(zhí)行時間


例題:

上面題目中,流水線周期為 2ns,100條指令的執(zhí)行時間為:(2+2+1)+(100-1)*2 = 203ns,或者是(3+100-1)*2 = 204ns。一般來說都是采用理論公式計算,但也可能會采用實踐公式來算。
3.2、流水線的吞吐率
,流水線的最大吞吐率計算公式:![]()
如上面例題,流水線的吞吐率為:100/203 ,最大吞吐率為:1/2
3.3、流水線的加速比
![]()
如上面例題,加速比為:(2+2+1)*100/203
3.3、流水線的效率


上圖中,流水線的效率為:((1+1+1+3)*4)/(15*4),也就是說,流水線的效率在空間圖上可以看做是:工作占用時空區(qū)/總的時空區(qū)
4、計算機的層次化存儲

4.1、cache

有時候并不會把寄存器放在存儲體系中,所以可以將 cache 認(rèn)為是訪問速度最快的層次,但如果有寄存器,實際上還是會選寄存器。
![]()
電腦使用cache和主存儲器時,平均周期的計算公式:

比如,對cache的訪問命中率為 95%,cache的周期時間為 1ns,主存儲器周期為 1000ns,那么此時系統(tǒng)的平均周期為:0.95*1 +(1-0.95)*1000 = 50.95ns
4.2、主存
主存可分為隨機存取存儲器和只讀存儲器。計算機系統(tǒng)的主存主要由DRAM構(gòu)成,SRAM主要組成cache。
RAM和ROM的應(yīng)用:系統(tǒng)的內(nèi)存一般由RAM和ROM組成,像cache一般是用靜態(tài)RAM的因為需要高速的緩存,需要讀寫速度快,而主存的話一般是用動態(tài)ram,便于存儲對讀寫速度每那么的快,而ROM則是存放一些系統(tǒng)程序的存儲器,有只讀功能,不可寫,比如開機的時候的BIOS。外存有很多種如閃存USB的硬盤,還有SSD的固態(tài)硬盤等。

4.3、主存 -- 編址
表示這個芯片有 8 個地址單元,每個地址空間有 4 個 bit 位信息,一共可以存儲 32 bit 位信息。注意,這么一個存儲器稱之為一個芯片,每一行稱之為 1 個地址單元或者內(nèi)存地址,每 1 格就是 1 個 bit。
例題:

地址由AC000H到C7FFFH,由C7FFFH 減去 AC000H 得到的是多少,然后 +1,就是多少個地址單元,因為 1 個地址單元能表示 1 個地址,有多少個地址就有多少個地址單元。C7FFFH 和 AC000H 都是 16進制的數(shù),相減得到是 1C000H,實際上就是1*164+12*163,然后再除以 K 即 210 就可以得到第一個空的答案:112。
如果該內(nèi)存地址按字(16bit)編址,意思是每個地址單元有 16 位。由 28 片芯片構(gòu)成,每個芯片有 16k 個存儲單元,那么每個存儲單元的存儲位為:(112K * 16)/(28*16K)= 4

4.4、磁盤結(jié)構(gòu)與參數(shù)


先在磁道讀取完數(shù)據(jù),然后才能對數(shù)據(jù)進行處理。
例題:

旋轉(zhuǎn)周期為33ms,則旋轉(zhuǎn)1個扇區(qū)需要3ms。磁頭處于R0開始處,則讀取R0需要3ms,但每個記錄的處理也要3ms,處理完R0后磁頭已經(jīng)到了R2開始處,因為要順序處理,所以需等到磁頭重新旋轉(zhuǎn)至R1開始處,需等待30ms,然后讀取R1,處理R1,以此類推,計算后可以得到答案為 366ms。
如果信息存儲可以優(yōu)化分布,那就可以像左圖,處理完R0后,磁頭剛好處于R1開始處,可以立即處理R1,不用等待。以此類推,計算后可得此時答案為 66ms。
5、計算機總線
根據(jù)總線所處的位置不同,總線通常被分成三種類型,分別是:內(nèi)部總線、系統(tǒng)總線(數(shù)據(jù)總線、地址總線、控制總線)、外部總線
數(shù)據(jù)總線:數(shù)據(jù)總線用于傳遞數(shù)據(jù)信息。
地址總線:地址總線用于傳輸?shù)刂返男畔?,如要訪問外設(shè)的內(nèi)存地址、某個外設(shè)的地址等。由于地址通常由CPU提供的,所以地址總線一般是單向傳輸?shù)摹?/p>
控制總線:顧名思義,控制總線用于傳送控制信號。例如CPU向內(nèi)存或輸入輸出接口電路發(fā)出的讀寫信號;又如,輸入輸出接口電路向CPU發(fā)送的用于同步工作的聯(lián)絡(luò)信號等。
6、串聯(lián)系統(tǒng)和并聯(lián)系統(tǒng)
串聯(lián)系統(tǒng)模型:
![]()
可靠性:
,即為各個子系統(tǒng)的可靠性相乘的值
可靠性:
當(dāng)所有系統(tǒng)都失效時,系統(tǒng)才失效。
7、CRC與海明校驗碼
7.1、碼距
在整個編碼系統(tǒng)中,所有的任意的兩個碼字之間,一個碼字最少需要改變多少個位才能變成另一個碼字,這個位數(shù)就是碼距。

7.2、循環(huán)校驗碼CRC
循環(huán)校驗碼可以檢錯但不能糾錯。
在信息傳送時,會在其尾部加入校驗信息,加入校驗碼后的數(shù)據(jù)與生成多項式進行模2相除,余數(shù)如果為0則認(rèn)為沒出錯,否則認(rèn)為傳輸過程中出錯了。
7.3、海明校驗碼
海明校驗碼可以檢錯也可以糾錯。
根據(jù)接收到的數(shù)據(jù)的信息位生成校驗位,如果生成的校驗位和得到的校驗位不一致,則認(rèn)為出錯。兩個校驗位信息異或,得到是多少就認(rèn)為是哪個位置出錯。
7.4、奇偶校驗

8、操作系統(tǒng)


8.1、進程的狀態(tài)

8.2、PV操作
PV操作利用信號量機制,是一種有效的進程同步與互斥工具,可以實現(xiàn)資源的互斥使用。


先執(zhí)行P(S1),S1為0,此時S<0不成立,所以繼續(xù)執(zhí)行,V(S2),S2為1,S2<=0不成立,所以繼續(xù)執(zhí)行生產(chǎn)者進程。執(zhí)行P(S1),S1為-1,S1<0成立,此時阻塞生產(chǎn)者進程,放到進程隊列,執(zhí)行消費者進程。消費者執(zhí)行P(S2)、V(S1),以此類推,當(dāng)S<=0時,消費者進程又激活生產(chǎn)者進程。
V操作可以激活P操作,PV操作一般來說都是配對的,即P(S1)和V(S1)。判斷一個操作是P還是V操作,可以看他是否依賴于其他進程,如果需要依賴其他進程才能執(zhí)行,那他就是P操作。
例題:

收銀員進程由付款進程激活,所以可以知道a1是一個V操作,b1是一個P操作。而購書者付款進程也需要等收費進程執(zhí)行完畢后才能執(zhí)行完畢,所以說可以知道a2是一個P操作,b2是一個V操作,而PV操作都是配對的,所以根據(jù)選項可以知道選AC
8.3、死鎖

避免死鎖可以通過:有序資源分配法和銀行家算法,但有序資源分配法會導(dǎo)致資源利用率比較低。
9、存儲管理
9.1、頁式存儲

頁式存儲管理就是把內(nèi)存物理空間劃分成大小相等的若干區(qū)域,一個區(qū)域稱為一塊.。把邏輯地址空間劃分為大小相等的若干頁,頁大小與塊大小相等?!绊摗笔沁壿媶挝?,”塊”是物理單位。
頁式存儲器的邏輯地址由兩部分組成:頁號+頁內(nèi)地址(這里的+是直接拼接的,而不是加法)。邏輯地址是指由程序產(chǎn)生的與段相關(guān)的偏移地址部分。
在存儲器里以字節(jié)為單位存儲信息,為正確地存放或取得信息,每一個字節(jié)單元給以一個唯一的存儲器地址,稱為 物理地址,又叫實際地址或絕對地址。物理地址=塊號X塊長+頁內(nèi)地址
例題:

第一個空,已知邏輯地址求物理地址,邏輯地址由 頁號和頁內(nèi)地址組成,頁面大小為4K,也就是212,也就是說頁內(nèi)地址應(yīng)該有12位,邏輯地址為十六進制的5A29H,每四個2進制位轉(zhuǎn)化為1個16進制位,也就是說后面三位的 A29 就是頁內(nèi)地址,那 5 就是頁號。查看頁表可以知道,頁號5對應(yīng)著塊號 6,而頁內(nèi)地址都是一樣的,所以物理地址為 6A29H。
第二個空,淘汰的話應(yīng)該要淘汰在內(nèi)存中,并且此時未被訪問的,所以應(yīng)該是頁號為 1 的。
例題:

程序分為6個頁面,且系統(tǒng)中沒有使用快表,意思是每次執(zhí)行一個頁面都需要查表,也就是每執(zhí)行一個頁面需要訪問兩次內(nèi)存,所以一共需要訪問 12 次內(nèi)存。
缺頁中斷指的是讀取執(zhí)行程序時,該程序沒有在內(nèi)存中,此時就產(chǎn)生1次缺頁中斷。約定讀取指令時只產(chǎn)生 1 次缺頁中斷,所以讀取 swap 指令產(chǎn)生 1 次缺頁中斷,讀取操作數(shù) A 時,由于該計算機系統(tǒng)按 8 位編址,AB都是16位,所以讀取都需要訪問兩次內(nèi)存,產(chǎn)生兩次缺頁中斷,所以一共是產(chǎn)生 5 次缺頁中斷。
10、編譯過程

在對高級語言源程序進行編譯或解釋處理的過程中,需要不斷收集、記錄和使用源程序中一些相關(guān)符號的類型和特征等信息,并將其存入符號表中。

浙公網(wǎng)安備 33010602011771號