slido上的問題

64 views
Skip to first unread message

OS大叔

unread,
Oct 23, 2023, 11:33:19 AM10/23/23
to 中正資工,作業系統概論
請問老師,看過int 80、int 21、sysenter、syscall這幾個system call的呼叫方式,想請教這幾個差異為何

答:int 80和 int 21是比較老舊的方式,你現在依然可以用,他的速度比較慢。由於現在的作業系統使用分頁機制(以4k為單位)而不是分段機制(每一個段的長度是任意長度)。但x86同時支援分頁及分段機制(這好比穿了褲子以後外面再穿一條內褲,我不是指superman)。 因為int 80在切換時要同時切換「頁」及「段」速度比較慢。syscall只切換「頁」這會比較快,因為少了一些步驟。
(詳細的差別還是要去看手冊,或參閱下面連結,這個地方不用太深究,因為x86是超過40年歷史的指令集,有些設計在今日看來是不好的,因此棄之不用)

而外一提,x86-64s,目前還沒開始賣,但在x86-64s(s, 好像是subset的意思)完全拿掉分段機制,因為軟體沒在用,這個硬體就變得很「闌尾」(多餘的意思)。既然如此就乾脆把它切除乾淨

請問期中考範圍是到Peterson's solution還是第五章全部呢?以及考試題型大概會是什麼?謝謝老師

到peterson's sol.,考題會是問答題,我會根據youtube上的東西出。應該會有50%以上的考古題吧,考古題直接奉上,如下,請查照


1. Linux將記憶體依照用途分為三類,buffer、cache及program memory,請解釋這三種記憶體的用途

2. 請從「組合語言」的角度或者「匯流排」或其他方面來說明port I/O與memory mapped I/O的差異

3. 請「具體說明」為什麼使用DMA可以提高CPU(或者電腦)的效能(例如:說明DMA的時候為什麼CPU可以繼續「計算」)

4. 請問中斷(interrupt)與函數呼叫有何不同?(提示:呼叫者?應該保留哪些狀態,執行完成後怎樣回到之前的狀態等等)

5. 請說明vDSO中的「系統呼叫」為什麼比傳統的系統呼叫要來得快

6. 在Linux 2.4核心中,如何區分出I/O-bound task?

7. 請說明CFS的演算法中,高優先權的task為什麼可以有比較短的response time,並且又有更多的CPU使用時間?

8. 底下的程式碼與pthread_spinlock大致上是一致的,請問pthread_spinlock是否符合bounded waiting,如果是的話給一個約略的證明,不是的話給一個反例。 "

9. GNU/Linux的執行緒屬於1:1模型,也就是Linux kernel為每一個執行緒在核心中創立完整的資料結構,因此每一個執行緒都可以獲得核心在CPU及I/O上的完整支援。
這個方法的缺點是執行緒對執行緒間的context-switch都只能在kernel mode進行,從user mode切換到kernel mode的成本較高。
假設有一種新的程式語言叫做Let-It-Go,使用Let-It-Go撰寫的應用程式會與Linux kernel間建立一個work-queue,要交付給Linux kernel的工作(例如:read、write)由system call變為「將工作塞入work-queue」,Linux kernel會定期檢查work-queue中是否有工作需要完成,工作完成後會將work-queue中的該工作標記為「已完成」
Let-It-Go的thread model為M:1,也就是Let-It-Go建立的執行緒在核心中只有一個資料結構,對Linux kernel而言,他並不知道使用Let-It-Go撰寫的應用程式到底有多少個執行緒。
Let-It-Go的執行緒在交付工作後會變為「not-ready」。之後Let-It-Go的scheduler會做三件事情
1. scheduler 檢查 work-queue中是否有些工作已完成?並將這些已完成工作的thread由not-ready設定為「ready」。
2. 從「ready」執行緒中挑選一個,並繼續執行該thread
3. 如果所有執行緒都是「not-ready」時,你認為Let-It-Go要怎樣處理?"
2. 請從「組合語言」的角度或者「匯流排」或其他方面來說明port I/O與memory mapped I/O的差異

3. 請「具體說明」為什麼使用DMA可以提高CPU(或者電腦)的效能(例如:說明DMA的時候為什麼CPU可以繼續「計算」)

4. 請問中斷(interrupt)與函數呼叫有何不同?(提示:呼叫者?應該保留哪些狀態,執行完成後怎樣回到之前的狀態等等)

5. 請說明vDSO中的「系統呼叫」為什麼比傳統的系統呼叫要來得快

6. 在Linux 2.4核心中,如何區分出I/O-bound task?

7. 請說明CFS的演算法中,高優先權的task為什麼可以有比較短的response time,並且又有更多的CPU使用時間?

8. 底下的程式碼與pthread_spinlock大致上是一致的,請問pthread_spinlock是否符合bounded waiting,如果是的話給一個約略的證明,不是的話給一個反例。 "

9. GNU/Linux的執行緒屬於1:1模型,也就是Linux kernel為每一個執行緒在核心中創立完整的資料結構,因此每一個執行緒都可以獲得核心在CPU及I/O上的完整支援。
這個方法的缺點是執行緒對執行緒間的context-switch都只能在kernel mode進行,從user mode切換到kernel mode的成本較高。
假設有一種新的程式語言叫做Let-It-Go,使用Let-It-Go撰寫的應用程式會與Linux kernel間建立一個work-queue,要交付給Linux kernel的工作(例如:read、write)由system call變為「將工作塞入work-queue」,Linux kernel會定期檢查work-queue中是否有工作需要完成,工作完成後會將work-queue中的該工作標記為「已完成」
Let-It-Go的thread model為M:1,也就是Let-It-Go建立的執行緒在核心中只有一個資料結構,對Linux kernel而言,他並不知道使用Let-It-Go撰寫的應用程式到底有多少個執行緒。
Let-It-Go的執行緒在交付工作後會變為「not-ready」。之後Let-It-Go的scheduler會做三件事情
1. scheduler 檢查 work-queue中是否有些工作已完成?並將這些已完成工作的thread由not-ready設定為「ready」。
2. 從「ready」執行緒中挑選一個,並繼續執行該thread
3. 如果所有執行緒都是「not-ready」時,你認為Let-It-Go要怎樣處理?"
Reply all
Reply to author
Forward
0 new messages