nachos下雙向量表的設計(含併發錯誤)1

2022-07-25 02:45:08 字數 2166 閱讀 1689

nachos下雙向量表的設計

一.實驗目的

本次實驗的目的在於對nachos進行熟悉,並初步體驗nachos下的併發程式設計

二.實驗內容

安裝nachos;

用c++實現雙向有序鍊錶;

在nachos系統中使用你所寫的鍊錶程式並演示一些併發錯誤

三.實驗執行例項

一.實驗相關步驟

實驗需要編寫三個相關檔案,它們是dllist.h、dllist.cc、dllist-driver.cc,在dllist.h定義了雙向鍊錶,即定義了兩個類,element和dllist,其具體**如下:

class

element

;class

dllist

;

void

dllist::sortedremove()

head->next=temp_next;

temp_next->prev=head;

}else

//printf("jj\n");

head->next=null;}}

else

if(head->next==null)

printf(

"\n鍊錶已經沒有資料\n");

//printf("ee\n":);

temp=head;

//printf("a");

/*while(temp->next!=null)

printf("%d\n",temp->key);

printf("b");

*/}

dllist.cc中實現了雙向鍊錶的相關功能,包括element的建構函式、析構函式以及dllist的建構函式、析構函式和sortedinsert()、printfn()、sortedremove()、remove()等。而在dllist-driver.cc中實現了插入n個元素和刪除n個元素,具體實現如下:

完成**編寫後需要在nachos-3.4/code/makefile.common中新增相關路徑,在thread_h中加入dllist.h, 在thread_c中dllist.cc和dllist-driver.cc、thread_o中加入dllist.o和dllist-driver.o。

接著,在nachos-3.4/code/threads/下執行make depend和make命令。

void

threadtest1()

執行時在nachos-3.4/code/threads/下輸入./nachos thread_num node_num flag,其中引數分別為執行緒數,節點數,錯誤標誌,當錯誤標誌位0是代表正常情況。

二.說明

此次實驗通過對併發執行緒的設計對雙向鍊錶的操作,更清晰地了解執行緒間的運**況。還通過多執行緒對雙向鍊錶操作所產生錯誤的演示,加強了我們執行緒工作原理的認識。

此外,多執行緒對雙向鍊錶的操作所產生的錯誤,主要有如下幾種,當錯誤標誌為1 時,會發生如下所述錯誤:執行緒0在插入n個元素後被執行緒1說搶占插入n個元素,然後執行緒0進行刪除n咯元素的操作,而由於插入時時按照大小順序插的,導致了執行緒0刪除的不是自己插入的n個元素。

當錯誤標誌位2時,有如下錯誤:執行緒0插入1個元素後,被執行緒1搶占,執行緒1插入乙個元素後,又被執行緒0搶占插入,直至兩個執行緒完成插入過程。由於插入時時按大小排序插入的,故導致,在刪除時,兩個執行緒沒能正確的刪除它們自己插入的元素。

本次實驗作為作業系統本學期的第一次實驗,由於對nachos環境不是特別熟悉,所以剛上手時有一定難度,但建立雙向鍊錶的過程較為基礎。

字的向量表示

得到乙個字的向量表示,能夠保留字之間共現次數相關的資訊。先得到乙個語料庫的詞庫,然後計算乙個字左邊視窗內和其共同出現的次數的數量,值與距離相反。每個字會對映到乙個整數index,這個index就對映到向量的index。比如 these 對映到index 10,則在 are 這個字的向量表示裡vec ...

ARM的異常及向量表

arm具有7種異常,分別為 1 復位 2 未定義指令 3 軟中斷 4 預取指令終止 5 資料終止 6 中斷請求 irq 7 快速中斷請求 fiq 用一句通俗的話去表達arm的運 況,那就是arm總會在執行在以上7種異常情況的某一種之下。初初了解arm時總會難於去了解這個 異常 是什麼樣的乙個意思,到...

ARM的啟動和中斷向量表

對於s3c2440而言,啟動的方式有兩種,一是nor flash方式啟動,二是nand flash方式啟動。nor flash的位址範圍如下 0x0000.0000 0x0800.0000 2m nor flash 片內的bootsram位址被置為 0x4000.0000 0x4000.dfff 4...