原创 地址映射與共享

本次已經是OS的第五次實驗了,這次要做的內容有: 用Bochs調試工具跟蹤Linux 0.11的地址翻譯(地址映射)過程,瞭解IA-32和Linux 0.11的內容管理機制;在Ubuntu上編寫多進程的生產者—消費者程序,用共享內存做緩

原创 幾種常用的排序算法的分析及java實現(希爾排序,堆排序,歸併排序,快速排序,選擇排序,插入排序,冒泡排序)

最近決定每天學點數據結構與算法,寫博客來督促自己繼續學習~ 以下的每個排序的寫法格式基本按照先介紹基本思想,再描述具體過程,最後是具體代碼。關於複雜度等問題後續更新。如有寫的不嚴謹的地方,歡迎指出,相互交流。 希爾排序 基本思想:將一組

原创 TextBox編輯框間的自動跳轉C#實現

爲了滿足用戶對於編輯框操作的一些鍵盤操作,讓編輯框間的跳轉變得更加友好。我實現了這樣的一個小程序來實現編輯框的自動跳轉功能。 對於自動跳轉,我設計了以下幾條規則: 上下跳轉:在控件的寬度帶範圍,距離此控件最近的其他控件,才能實現上下跳轉。

原创 進程與線程;同步與互斥:事件,信號量,臨界區,互斥量

進程 一個正在執行的程序 計算機中正在運行的程序的一個實例 可以分配給處理器並且由處理器執行的一個實體 由一個順序執行的代碼段、一個當前狀態和一組相關係統資源所刻畫的活動單元 進程是操作系統資源分配的基本單位 線程 進程中代碼執行

原创 內核級線程

不知不覺已經是最後一次的實驗了。這一次實驗的內容是: 在Ubuntu下編寫多線程的應用程序memtest.c,解決一個可並行運算的問題。在Linux 0.11的進程管理基礎上,按照POSIX Threads標準實現內核級線程,使其能支持

原创 信號量的實現和應用

第四次實驗是一道坎啊,話說當年差點沒做出來,各種糾結的問題都出現了。這一次的實驗涉及到前幾次實驗的小綜合,所以要求有點高。建議一定要認真仔細多閱讀幾遍指導書。實驗的內容簡單來說就是用信號量來實現生產者和消費者問題。建立一個生產者進程,N

原创 proc文件系統的實現

第七次實驗的內容是 在Linux 0.11上實現procfs(proc文件系統)內的psinfo結點。當讀取此結點的內容時,可得到系統當前所有進程的狀態信息。例如,用cat命令顯示/proc/psinfo的內容,可得到: # cat

原创 Java實現C語言語義分析(遞歸下降)

說起這次的語義分析,不得不說的是我的重大的改變。上一次的語法分析是利用了預測分析法來實現的,經過多方考證,發現用預測分析法的語法分析器基礎來實現語義分析的困難重重,例如在語法指導翻譯的時候那個棧的變化和各種屬性的傳遞就已經讓我頭暈腦脹了。

原创 有限次數的Undo&Redo的C#實現

爲了實現Undo和Redo,必須要在程序中保存起程序的運行狀態,從而能夠在Undo時跳轉到前一個狀態和在Redo時跳轉到下一個狀態。爲了實現狀態的維護,我採用了兩個棧來分別保存Undo操作的狀態和Redo操作的狀態。 p

原创 Android內核編譯與裁剪

編譯Android內核 創建一個目錄android,用來存放我們即將要下載的android源碼。   命令:$ mkdir android 進入上一步中建立好的目錄android。   命令:$ cd android 選擇一個內核版本,使

原创 字符顯示的控制

第六次實驗可以算是很簡單的一次了,只要知道了0.11如何響應你的鍵盤事件,一切問題都迎刃而解了。實現這個實驗的方法有很多,我的也是僅供參考,其他方法可能還有些是涉及到修改彙編代碼的。 首先,要做的就是在linux-0.11\kernel\