====== 第 12 章 系統調用、內存管理 ======
GITHUB: https://github.com/trb331617/os_elephant/tree/master/chapter_12
系統調用:getpid, write(printf), malloc/free
完善了內存管理:之前實現的是以4KB頁爲單位的內存申請,在此基礎上,實現了任意內存大小的申請、釋放,並實現了用戶接口malloc() 和free()
運行截圖:
在內核線程的main()函數中,創建了2個內核線程、2個用戶進程,
1) 2個內核線程,都調用malloc申請了254、255、256字節的內存。內核線程是共享內核的1GB內存空間(虛擬地址必須唯一),所以運行截圖中可以看到:這2個內核線程申請到的內存基址,總體是連續累加的,以0x100(即256Bytes)爲單位。
2) 2個用戶進程,都調用malloc申請了254、255、256字節的內存。用戶進程都有自己獨立的4GB虛擬內存空間,所以運行截圖中可以看到:這2個用戶進程申請到的內存基址是各自獨立的,並且可以是相同的虛擬地址。
====== 第 11 章 用戶進程的創建與調度 ======
GITHUB: https://github.com/trb331617/os_elephant/tree/master/chapter_11
運行截圖:
在kernel的main()函數中創建了2個用戶進程(分別循環執行a++、b++),創建了2個內核線程(分別打印a、b)
用戶進程的priority和ticks設置爲3,內核現成的設置爲13。所以,運行結果中,打印更快、增長更慢。
p.s.: 由於文件系統尚未實現,這裏暫時用函數代替file來創建用戶進程。
代碼結構: