2019 作業系統 Operating Systems

Announcements

  • [12/13]-目前還沒開放填第二次 demo 的時間表,先公布日期只是讓你們方便買車票而已,到時候會統一公佈開放填寫
  • [12/12]-The date of HW3 and HW4 demo are 2020/01/06, 2020/01/07
  • [12/12]-Homework4 is annouced
  • [12/11]-The date of final exam is 2020/01/09
  • [12/11]-Chapter 9 slide has been published
  • [12/05]-The rules of homework demo are announced
  • [12/03]-Chapter 9 slide has been published
  • [11/20]-Homework3 is annouced
  • [11/26]-Chapter 8 slide has been published
  • [11/20]-Chapter 7 slide has been published
  • [11/14]-The seat table is announced
  • [11/11]-The class today is cancelled due to school anniversary
  • [11/05]-Chapter 6 slide has been updated. Please download the latest version
  • [11/03]-The midterm exam will be held on 14th November
  • [11/03]-Chapter 5, 6 slides have been updated. Please download the latest version
  • [10/30]-第六章投影片已放上網站
  • [10/27]-本學期 OS 期中考在 11/14(四) 下午1:10-3:00
  • [10/28]-作業二投影片已放上網站
  • [10/25]-作業一 QA14 有更新,各位同學可以看一下
  • [10/24]-作業一 QA13 有更新,各位同學可以看一下
  • [10/23]-第五章投影片已放上網站
  • [10/22]-作業一 QA12 有更新,各位同學可以看一下
  • [10/19]-作業一 QA11 有更新,各位同學可以看一下
  • [10/17]-作業一 QA8, 9, 10 有更新,各位同學可以看一下
  • [10/16]-第四章投影片已放上網站
  • [10/16]-第三章投影片有更新,請使用新版投影片
  • [10/09]-作業一 QA7 有更新,各位同學可以看一下
  • [10/09]-作業一 QA6 有更新,各位同學可以看一下
  • [10/08]-作業一 QA5 有更新,各位同學可以看一下
  • [10/07]-作業一 QA1, 2, 3, 4 有更新,各位同學可以看一下
  • [10/06]-Preliminaries 投影片有更新,請使用新版投影片
  • [10/06]-星期一(10/07)會宣布第一次作業
  • [10/06]-兩份作業相關投影片已放上網站
  • [10/02]-第三章投影片已放上網站
  • [09/25]-第二章投影片已放上網站
  • [09/18]-第一章投影片有更新,請各位同學使用最新版的投影片
  • 第一章投影片已放上網站
  • 9/13(五)學校停電,網頁暫時關閉
  • 第一週不上課



Midterm exam

Final exam

  • Venue:

  • Time:
    2020/01/09 13:10~15:00
    Last entry time: 13:30

  • Seat table

Course slides

Assignments

Preliminaries

Homework 1 - Process Communication

  • Click here to start your assignment

QA

  1. 有同學詢問第十頁投影片中,這句話的意思是什麼?

    各位同學不好意思,剛剛解釋時漏掉這行,這項要求的意思是在 user space applications 開始通訊後,還要能再啟動新的 user space application。

  2. 有同學詢問是只要 Fail 就結束程式嗎?
    不是唷,是只有 registration fail 的時候才結束程式,Send or Recv fail 不能結束程式。

  3. VM 登入密碼是什麼?
    各位同學,真是抱歉,我忘記有密碼了,密碼是 0000

  4. 請問可以使用 c++ 寫作業嗎?
    可以,作業只能使用 c/c++ 完成。

  5. 有同學詢問 VM 中安裝的工具?
    基本上 make, git, cppcheck, gcc 應該都有裝好了,因為我們鼓勵使用 c 語言來寫作業,所以預設並沒有裝 g++,請有需要的同學自行安裝 g++ 7.4.0,謝謝。

  6. 有同學詢問 cppcheck 使用方法以及 commit message 是否一定要每個都遵守規定?

    1. 今年作業的 pre-commit check 並沒有做 cppcheck 以及 commit message 的檢查,所以其實不會因為 cppcheck 沒過或是 commit message 打太爛導致不能 commit。 只要能通過 pre-commit hook 的 astyle 檢查,都不會因為不良的 coding 習慣被扣分,但還是希望各位都有良好的 coding 習慣
    2. git commit message 的部份如前述。平常寫 code 可以存檔,或是善加利用 git branch,等一個 feature 完成再做 commit。擔心被扣分數的部份,我們只會看你最後提交的程式碼,不會特別檢查每個 commit message,一樣只是希望各位有良好習慣。
  7. 有同學詢問需要實作當 user app 結束程式後從 kernel module 取消註冊的功能嗎(就是 user app 結束後可以用相同的 id 再度註冊)?
    因為投影片沒有提到,所以不用唷。當然有人這麼認真上進的話老師一定會很感動的。

  8. 有同學詢問判斷超過 255bytes 的程式可以寫在 user space application 嗎,還是一定要在 kernel module 判斷?
    作業投影片要求 kernel 必須檢查,因為 kernel 裡面的 data buffer 只給 256 大小,當然你可以在 client 就先檢查了,但是 kernel 還是必須處理萬一 socket 傳過來的資料大小超過自己的 buf 大小。養成習慣,要保護好 kernel,別相信傳過來的資料會是符合規定的。

  9. 有同學詢問測試超過 255bytes 的測資會有上限嗎,還是這部分應該動態決定 buffer 大小?
    測資無上限,能處理好不讓程式當掉就好,看超過 255 你是要印訊息跟使用者說最多只能接受 255 或是自己刪掉後面超出的字串或是動態配置都可以,可是動態配置也要小心不要弄到程式 OOM 被 kill。

  10. 有同學詢問需要考慮使用者輸入不是作業要求的指令嗎?(ex id > 1000 等等)
    投影片第七頁的第三行有寫到 "(1~1000)",意思是指測資只會有 1~1000,像是 type 的測資只會有 queued 跟 unqueued 不會出現 queueued 這種東西。當然,謹慎一點就是 application 執行的時候就要檢查每個參數是不是合法的。

  11. 有同學發現 make module 的時候會有一行 "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
    抱歉,這是助教那時候沒注意到,不過這個部分並不會影響到編譯 module,module 還是可以正常被編譯並且 insert。

  12. 有一些同學最近寄信來詢問改作業的測資,在這邊統一再說一次
    只會有作業投影片中提到的測資,要拿到分數的話,各位同學只要符合投影片要求即可。但是只要投影片中有提到的檢查跟要求都必須實作,例如 kernel module 必須檢查字串長度,以及字串可以含空白,甚至空白字串。所以如果我打了 256 個空白,這算是正常的測資,要能依照作業要求處理。

    1. 正常測資的意思就是作業要求中有提到可能會被測試的測資,程式都要能正常且正確處理(投影片都會寫很清楚要如何處理),不能讓程式當掉。
    2. 我們的測資不會有作業要求沒提到的,例如:"SEND 999 aaa"、"./com_app 123456 aaa"、"Recvvvvv",這種輸入沒有在投影片裡面提到如何處理,只是為了拿分數的話是不需要處理的。
  13. 有一些同學最近寄信來詢問 mailbox 資料結構的部份,在這邊統一再說一次
    作業投影片中 requirement 有提到的部份,全部都是必須完全遵守的,要拿滿分也只要需要滿足這些要求。所以資料結構是不能更改的,也必須使用這個資料結構來實做作業的 mailbox。不過 .h 檔是可以修改的,可以自由新增所需要的資料結構或 macros。

  14. 有同學發現 module/com_kmodule.h 中 struct mailbox 的變數 msg_data_count,在投影片的 type 是 int,但在助教給的檔案中定義為 unsigned char
    非常抱歉因為助教疏失造成這種問題,請以投影片為標準,但萬一有同學因為這個助教造成的錯誤導致交上來的 type 不一樣,我們不會扣分。
    非常抱歉。

Homework 2 - Multithreaded String Searching

  • Click here to start your assignment

QA

  1. 由於助教的疏忽,scripts 內的 install-git-hooks 及 pre-commit.hook 無法執行,同學可以拿作業一的 scripts 來覆蓋上去,或是再 scripts 資料夾裡下指令:
    $ chmod +x install-git-hooks
    $ chmod +x pre-commit.hook
    就能執行了,不好意思造成同學們的不便。

  2. 有同學問 request 或 file path 有沒有長度限制?
    這次作業並沒有限制這些資料的長度,所以同學可以自己設定,但是當長度超過設定的時候程式不能當掉,最好可以處理任何長度,不然也要能報錯,讓程式能繼續執行。

  3. 有不少同學在問為什麼 client 端也要實作 multi-thread?
    因為這次的作業希望可以在 client 這邊可以同時發送多個 request 給 server,不過如果 client 是 single thread,那麼 client 發送 request 之後就會為了等 server 的 result 而停住,就無法同時在送 request 了。所以我們希望 client 實作成 multi-thread 的形式,一條 thread 就負責一個 request,就可以讓 client 同時發送多個 request 了。

  4. 有同學在問 server 裡是否只會有 .txt 檔
    我們只會在 server 裡面放文字檔,但是不一定是 .txt 檔,所有在 server 裡面的檔案都要搜尋。

  5. 有同學在問參數或是 Query 的格式要不要檢查,只要是 requirements 有列出來 format 的部分,全部都要檢查,包括順序、空格、雙引號等等。

  6. 有不少同學在問是否要做多個 clients 傳送 request 給 server ,這部分助教一開始的回答是要實作,但是後來在看投影片,覺得這部分沒有要求的很明確,所以決定可以不用實作這部分,已經實作的同學會當作額外加分。

Homework 3 - Scheduling Simulation

  • Click here to start your assignment

QA

  1. 關於 config.[ch] 內 resources_id 的註解

    RESOURCE_1,      /* may be accessed by T1, T4 */
    RESOURCE_2       /* may be accessed by T4, T5 */
    

    意思是在這個 case 只有 T1, T4 會用到 RESOURCE_1 , test case 也不會故意用 T1, T4 以外的 task 來存取 RESOURCE_1。

  2. 有同學詢問能不能修改 typedefine.h ?
    只要不改到助教已經預先定義好的 type, macro, data structure 都沒問題。

  3. 有同學詢問關於測資的問題
    測資的 task and resource 數量沒有上限,但是在每個 test case 的 config.h 內都會定義好 TASKS_COUNT and RESOURCES_COUNT ,請同學們不要把 code 寫死,試著利用這些 macro 來做相關的初始化。

  4. Would the tasks in task_const[] and resources in resources_id[] be arranged in order in the configuration files?
    The ID of each task/resource would be the same as its index in task_const[]/resources_id[].

  5. Could we add new .c/.h files?
    Yes, but you should check whether the Makefile could run correctly.

  6. About scehduling policy
    Tasks with equal priority should be started and finished depending on their order of activation, that is, for tasks with the same priority, the task which has been preempted should be executed first.

  • If you have any questions about assignments, please contact the TA

Homework 4 - Memory Manager

  • Click here to start your assignment

Homework demo

  • The dates are 12/19 and 12/20.
  • You should come to fill in the time table that is pasted outside lab.
  • Come to lab at your demo time, and we will execute(test) your homework and ask you some basic questions.
  • If you don't come to demo, you will not get any homework score.

Contact us

如果有任何問題,包含:課程內容、網頁錯誤及漏洞…等,請與助教聯繫
Address: 65409, CSIE Department Building
Email: oslab@mail.csie.ncku.edu.tw

OSLab @ NCKU 2018 Published with Ghost