紫光展銳秋招筆試 錯題筆記

2021-10-02 22:59:59 字數 4967 閱讀 8815

此為我在作完紫光筆試後的錯題記錄與查詢,知識點涉及題目但不包含題目,是自己在考試過程中記錄暴露出來的知識盲區,考試後查的。聊作記錄,避免再犯。

iqr中斷過程

mmu && ddr && cache

彙編arm wfi和wfe指令

arm 使用什麼技術來支援記憶體越界訪問檢測

記憶體顆粒

linux核心驅動device和drive匹配方式優先順序最高是哪個

gcc編譯環境

磁碟分割槽表

選擇了某種啟動方式後,啟動位址通常都是固定的。

arm系統無論從何種裝置啟動都是從0位址開始執行的。

powerpc通常是0x100或者0xfff00100。

8086cpu上電復位後,執行的第一條指令的位址是ffff0h

1、使用者模式(user):正常程式執行模式;

2、快速中斷模式(fiq):高優先順序的中斷產生會進入該種模式,用於高速通道傳輸;

3、外部中斷模式(irq):低優先順序中斷產生會進入該模式,用於普通的中斷處理;

4、特權模式(supervisor):復位和軟中斷指令會進入該模式;

5、資料訪問中止模式(abort):當儲存異常時會進入該模式;

6、未定義指令中止模式(undefined):執行未定義指令會進入該模式;

7、系統模式(system):用於執行特權級作業系統任務;

8、監控模式(monitor):可以在安全模式和非安全模式之間切換;

鎖是核心中使用最頻繁,最基礎的設施之一,在核心的各個模組中被大量使用。鎖的本質是在併發過程中保證資源的互斥使用。linux核心提供了多種鎖,應用的場合也各不相同,主要包括:原子操作,訊號量,讀寫鎖,自旋鎖,以及rcu鎖機制等

linux的核心鎖主要是自旋鎖和訊號量。

自旋鎖(spin_lock)

自旋鎖是核心中最基礎的鎖機制。自旋鎖不會引起呼叫者睡眠,如果自旋鎖已經被別的執行單元持有,呼叫者就一直迴圈在那裡看是否該自旋鎖的持有者已經釋放了鎖,"自旋"一詞就是因此而得名。自旋鎖適用於鎖使用者保持鎖時間比較短的情況

訊號量(semaphore/mutex)

訊號量semaphore是一種睡眠鎖,實現對多個同類資源的互斥訪問,如果資源個數降為1個,就是互斥鎖mutex。訊號量實現原理如下:初始有n個同類資源,當某個執行緒獲取(down操作)資源時,資源個數-1。當所有資源被分配完,此時當前執行緒被掛起在等待佇列上,直到某個執行緒釋放了(up操作)資源後,喚醒在等待佇列上的執行緒重新獲取資源。

iqr中斷過程

cpsr:當前程式狀態暫存器

spsr:程式狀態備份暫存器

r13:棧指標暫存器

r14:連線暫存器

r15:程式計數器

題目已知設定mmu設定dd位址空間的頁表屬性是nomal & write-thorough。開啟mmu並使能cache後,往ddr空間寫資料,會

只寫入ddr。

記憶體又可以叫做主存。是cpu能直接定址的儲存空間,由半導體器件製成。記憶體的特點是訪問資料的速率快。

當cpu採用快取記憶體時,它的寫記憶體操作有兩種模式

優點:write-back:磁碟寫效能高

缺點:wirite-back:系統崩潰或突然斷電時,cache中的資料會丟失。

mmu(memory management unit)記憶體管理單元

它是**處理器(cpu)中用來管理虛擬儲存器、物理儲存器的控制線路,同時也負責虛擬位址對映為實體地址,以及提供硬體機制的記憶體訪問授權,多使用者多程序作業系統。

功能:對於程式而言,為了將程式分割成一張張的卡片(頁面),然後再執行的時候將需要的部分嵌入到物理記憶體的卡槽(頁框)裡面。mmu就是為了完成作業系統的這個功能而設計的。mmu可以在被初始化後,形成的乙個個虛擬位址對應到實體地址,將一張張的卡片分別對映到相應的物理記憶體中。舉個例子:在linux中的每個程序都維護著自己的頁表,在切換程序上下文的時候須要將頁表首位址也記錄下來( 即記錄頁表基位址暫存器的值,再將要被切換到的程序的頁表基位址還原到這個暫存器中 )。這個時候不同程序的同乙個虛擬位址都會對應著不同的頁表項,從而對應著不同的實體地址了。

ddr雙倍速率同步動態隨機儲存器,是記憶體的其中一種。

dram,sdram和sram

sram不需要重新整理電路即能儲存它內部儲存的資料。

而dram(dynamic random access memory)每隔一段時間,要重新整理充電一次,否則內部的資料即會消失。

相同容量的dram記憶體可以設計為較小的體積,但是sram卻需要很大的體積。

str r1,[r2] ; 將r1中的值存到r2所指定的位址中

str r1,[r2,#4] ;將r1中的值存到r2+4所指定的位址中

str r1,[r2],#4 ;將r1中的值存到r2所指定的位址中, 同時r2=r2+4

wfi(wait for interrupt)和wfe(wait for event)是兩個讓arm核進入low-power standby模式的指令,

不同點

arm 使用什麼技術來支援記憶體越界訪問檢測

記憶體顆粒

很多時候,常聽人們說到「記憶體顆粒」,其實這是港台地區對記憶體晶元的一種稱呼(僅對記憶體),其他的晶元,港台則稱為「晶元」,

在 晶元的內部,記憶體的資料是以位(bit)為單位寫入一張大的矩陣中,每個單元我們稱為cell,只要指定乙個行(row),再指定乙個列 (column),就可以準確地定位到某個cell,這就是記憶體晶元定址的基本原理。這個陣列我們就稱為記憶體晶元的bank,也稱之為邏輯 bank(logical bank)。

記憶體晶元的容量是一般以bit為單位的。

linux核心驅動device和drive匹配方式優先順序最高是哪個

匯流排,裝置和驅動

匯流排:乙個匯流排是處理器和乙個或多個裝置之間的通道. 為裝置模型的目的, 所有的裝置都通過乙個匯流排連線, 甚至當它是乙個內部的虛擬的,"平台"匯流排。

裝置:裝置就是連線在匯流排上的物理實體。裝置是有功能之分的。具有相同功能的裝置被歸到乙個類(class)中.在linux 系統中,每個裝置由乙個 struct device 代表。

驅動:驅動程式是在cpu執行時,提供操作的軟體介面.裝置模型跟蹤所有對系統已知的驅動. 這個跟蹤的主要原因是使驅動核心能匹配驅動和新裝置

總的來說其三者間的關係為bus有兩條鍊錶,分別用於掛接裝置和驅動,指定了其自身bus的device或者driver最後都會分別連線到對應bus的這兩條鍊錶上。

註冊過程

a 匯流排註冊:bus_register

linux bus的註冊都是通過bus_register()實現,以下是註冊過程:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-yn10k55s-1582015469152)(en-resource://database/887:1)]

b 裝置和驅動註冊:device_register 和 driver_register

linux device的註冊是通過device_register實現, linux driver的註冊是通過driver_register實現,以下是註冊過程:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-0g7zhqli-1582015469153)(en-resource://database/888:1)]

匯流排、裝置、驅動結構中,匯流排的match函式負責匹配驅動與裝置;然後匹配成功後會呼叫驅動中的probe函式,解除安裝驅動或裝置的時候後呼叫release函式. driver的註冊,主要涉及將自身掛接到bus的driver鍊錶,並將匹配到的裝置加入自己的device鍊錶,並且將匹配到的device的 driver成員初始化為該driver,私有屬性的driver節點也掛到driver的裝置鍊錶下,其中匹配函式是利用利用bus的match函式,該函式通常判斷如果driver有id表,就查表匹配,如果沒有就用driver和device名字匹配。當匹配成功後如果自動初始化標誌允許則呼叫初始化函式probe,bus的probe優先順序始終高於driver的。、

這裡可以看到匹配的優先順序如下:

裝置裡的driver_override被設定,優先順序最高。

驅動裡的of_match_table,和平台裝置的compatible比較。

高階配置和電源管理之類的匹配。

platform_driver裡的id_table裡的所有名字和裝置名字匹配。

最後再是裝置名字和驅動名字比較。

少優化->多優化:

o0 -->> o1 -->> o2 -->> o3

-o0表示沒有優化,-o1為預設值,-o3優化級別最高

-o1:優化會消耗少多的編譯時間,它主要對**的分支,常量以及表示式等進行優化。

-o2:會嘗試更多的暫存器級的優化以及指令級的優化,它會在編譯期間占用更多的記憶體和編譯時間。

-o3: 在o2的基礎上進行更多的優化。

-os:相當於-o2.5。是使用了所有-o2的優化選項,但又不縮減**尺寸的方法。

-c 只編譯並生成目標檔案。

-e 只執行 c 預編譯器。

-g 生成除錯資訊。gnu 偵錯程式可利用該資訊。

gpt:guid磁碟分割槽表(guid[globally unique identifier] partition table,縮寫:gpt)。其含義為「全域性唯一標識磁碟分割槽表」,是乙個實體硬碟的分割槽表的結構布局的標準。使用guid分割槽表的磁碟稱為gpt磁碟

mbr:master boot record,即硬碟主引導記錄分割槽表,只支援容量在 2.1tb 以下的硬碟,超過2.1tb的硬碟只能管理2.1tb,最多隻支援4個主分割槽或三個主分割槽和乙個擴充套件分割槽,擴充套件分割槽下可以有多個邏輯分割槽。

展訊校招2023年秋招筆試題

1 kmalloc vmalloc malloc的區別 vmallocmem unsigned char vmalloc 1000000 printk 1 vmallocmem addr x vmallocmem return 0 void exit mem module exit void mod...

貝殼秋招筆試

這是樓主參加的筆試,主要是為了提醒自己的短處,所以內容不會很詳盡 選擇題 1.資料庫的自然連線 2.mysql語法,drop database刪除表記錄和表結構?3.括號匹配 4.有乙個容量size為50的迴圈佇列,頭指標front 40 指向隊頭元素 尾指標rear 10 指向隊尾下乙個位置 問該...

秋招筆試 卓望筆試

斐波那契,當時居然沒看出來。解析 犯罪率可以理解為ab兩區的犯罪人數與總人口數的比。由此不難列出下式 3 0.01 3 0.01 5 0.015 28.6 答案 c 3.float f 3.4 筆試時經常會出現的乙個問題,float型float f 3.4是否正確 答案 不正確。原因 精度不準確,應...