OSTEP jyy
0x 01 reference
官網
教學影片
1.why learn OS
1.解決一個問題的步驟:why-what-how
為什麼要學習作業系統
什麼是作業系統
怎樣學習作業系統
2.三個根本問題
(1)作業系統服務誰
程式=狀態機
課程涉及:多執行緒Linux應用程式
(2)(乘機/應用視角)作業系統為程式提供什麼服務
作業系統=物件+API(用來操縱物件)
課程涉及:POSIX+部分Linux特性
(3)(實現/硬體角度)如何實現作業系統提供的服務
作業系統=C程式
課程涉及:xv6,自制迷你作業系統
2.code
說明 | 操作 |
---|---|
檢視使用者名稱 | uname -a |
傳送ACWing配置 | scp .bashrc .vimrc .tmux.conf:... |
下載tldr(too long dont read) | sudo apt-get install tldr |
3. wrong when install tldr
報錯,出現使用者名稱 is not in the sudoers file.
是因為當前的使用者沒有加入到sudo的配置檔案裡
解決方案:
步驟 | 方法 |
---|---|
切換到root使用者 | su - root |
修改配置檔案 | vim /etc/sudoers |
修改 | 增加配置, 在開啟的配置檔案中,找到ununtu/root ALL=(ALL) ALL, 在下面新增一行:your_user_name ALL=(ALL) ALL,wq!退出,這個檔案是隻讀的,所以需要加!在ubuntu下是最後一行 |
4. some jyy wonderful operating
功能 | 命令 |
---|---|
在vim裡面編譯C/C++ | :!gcc/g++ % -o main (% 獲取當前檔名) |
在vim裡面編譯並執行C++ | :!g++ % -o main && ./main |
wget用於從網路上下載資源,沒有指定目錄,下載資源回預設為當前目錄。wget支援HTTP,HTTPS和FTP協議,可以使用HTTP代理 | wget url |
0x 02 what is Programs and Compilers
1. notes
程式就是狀態機
數字系統是狀態機,程式執行在數字系統上,因而程式也應該是狀態機。
在 C 語言中,程式中所有的東西(堆,棧)就是程式的狀態,每執行一條一句,程式的狀態就會變一下。
include的形式語義就是複製貼上,它是在預編譯階段處理的,例如我們
#include <tets.c>
, 在預處理階段,會從一個目錄找到 include 的 test.c 檔案,然後將它的內容複製貼上到原始碼中。
2. more instruction
gdb layout src
asm volatile(“rdrand %rax”);
info proc mappings :檢視程序資訊
unist: unix standard library
3. bug
#define FOE_EACH(_) _(X) _(Y);
#define DEFINE(X) int X, X1;
FOE_EACH(DEFINE)
/*
我們的本意是執行:
int X, X1; int Y, Y1;
但是我們執行是:
int X, X1; int Y, X1;
這裡的X1重複定義了
這是因為X1的X並不能被識別,它會被認為是一個字串
正確的寫法是:
#define DEFINE(X) int X, X##1
這樣X##1的X就可以被識別
*/
4. Unix’s philosophy
- Make each program do one thing well
- Expect the output of every program to become the input to anothe