原创 第一章 基礎:邏輯和命題

1.1 命題邏輯 1.2 命題邏輯的應用 1.3 等價命題 1.4 謂詞和量詞 1.5 量詞嵌套 1.6 推理規則 1.7 證明簡介 1.8 證明方法和策略 邏輯規則明確了數學陳述的含義。比如,邏輯規則幫助我們理解和推理諸如“存在一個不

原创 exec系統調用都做了哪些事?

從整體上講,exec系統調用創建了用戶部分的地址空間。 具體地講,做了9件事: 調用nami函數打開有名字的二進制路徑path; 讀取ELF文件頭; 檢查該文件是否是ELF文件; 調用proc_pagetable來分配新的無用戶映射的頁表

原创 xv6裏的第一個用戶進程

調用鏈 kernel/entry.S->kernel/start.c->kernel/main.c->kernel/proc.c->user/initcode.S->user/init進程

原创 第5章 中斷和設備驅動

什麼是驅動? 驅動是操作系統中用來管理一個特定設備的代碼: 配置硬件設備; 告訴設備執行操作; 處理設備中斷; 跟可能在等待來自設備的I/O的進程進行交互; 驅動代碼需要一定的技巧,因爲驅動是跟其管理的設備併發執行的。 驅動必須理解設備

原创 內核地址空間

設計 權限 注意:地址空間是由虛擬地址組成的。 設計 直接映射部分 特徵:資源的虛擬地址等於物理地址; 包括:CLINT、PLIC、UARTO、VIRTIO disk、KERNELBASE、PHYSTOP等; 非直接映射部分 包括t

原创 來自內核的陷阱

問題1: 如何處理來自內核空間的陷阱? 處理步驟: 保存被打斷內核線程的所有寄存器的值; 處理陷阱:設備中斷或者異常; 返回到被陷阱打斷的任何代碼處; 調用鏈: 處理路徑:kernelvec->kerneltrap; 返回路徑:ker

原创 C語言提供了什麼?沒有提供什麼?

C語言提供了什麼? 不同的數據類型 包括基本數據類型(字符、整數、浮點數)+導出數據類型(指針、數組、結構體、聯合體) 表達式 通過運算符和操作數來形成; 語句 任何一個表達式,包括賦值表達式、函數調用等,都可以是一條語句; 控制流 包括

原创 來自用戶空間的陷阱

問題1:內核如何處理來自用戶空間的陷阱? 進入內核空間的路徑:先uservec,後usertrap; 返回用戶空間的路徑:先usertrapret,後userret; 問題2:函數uservec都做了哪些事? 保存除了pc之外的所有寄存器

原创 RISC-V的CPU陷阱處理機制

RISC-V的CPU硬件是如何處理陷阱的? 如果陷阱是設備中斷,且寄存器sstatus的SIE位被清除了,則不執行下面的任何步驟; 清除SIE位來使中斷不可用; 拷貝pc到sepc; 將當前模式保存到sstatus中的SPP位; 設置sc

原创 網易成本控彙總

成本控第1期:一本售價20元的書價格構成 成本控第2期:一盒杜蕾斯的價格構成 成本控第3期:一瓶礦泉水的價格祕密 成本控第4期:一瓶茅臺的價格構成 成本控第5期:一張體育彩票的價格構成 成本控第6期:一晚漢庭酒店經濟房的成本分析

原创 《一往無前》讀書筆記

序 小米的夢是什麼? 做最好的手機,買一半的價錢,推動智能手機在全球普及。 希望用互聯網思維來改變中國製造業,讓中國品牌在全球崛起。 希望建立商家和用戶之間朋友式的關係,讓全球每個人都能享受科技帶來的美好生活。 小米怎麼實現夢想? 手機+粉

原创 第1.3節 管道

xv6 第1.3節 管道 這一節中涉及的系統調用有: pipe fork close dup read 一個管道就是一個小型的內核緩衝區,將一對文件描述符暴露給進程:一個用於讀,另一個用於寫。向管道一端寫入的數據可用於另一端讀取。 管道

原创 第4章 陷阱和系統調用

有3類事件可導致CPU把普通的指令執行擱置在一邊,強制把控制權轉移到能處理事件的特定代碼處。 系統調用 用戶程序執行ecall指令來請求內核爲它做一些事; 異常 一條指令(用戶或者內核)做了非法的事,比如除以0、使用了一個非法的虛擬地址等

原创 C語言能做哪些事?不能做哪些事?

C語言提供了什麼? 不同的數據類型 包括基本數據類型(字符、整數、浮點數)+導出數據類型(指針、數組、結構體、聯合體) 表達式 通過運算符和操作數來形成; 語句 任何一個表達式,包括賦值表達式、函數調用等,都可以是一條語句; 控制流 包括

原创 第3課 操作系統的組織結構

第3課 操作系統的組織結構 今天的主題: 操作系統設計 系統調用 微內核/整體內核 在xv6中的第一個系統調用 操作系統的示意圖 應用,比如sh、echo等 系統調用接口,比如open、close等 操作系統 操作系統的目標有哪