操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第1頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第2頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第3頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第4頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、哈爾濱理工大學(xué)課程設(shè)計(jì)(計(jì)算機(jī)操作系統(tǒng))題目: 用戶命令接口 班級: 姓名:指導(dǎo)教師:系主任: 2014年03月01日目 錄1用戶命令接口課程設(shè)計(jì)11.1 題目分析11.2 數(shù)據(jù)結(jié)構(gòu)11.3 流程圖11.4 實(shí)現(xiàn)技術(shù)21.5 設(shè)計(jì)結(jié)論和心得22 Linux代碼分析32.1 功能說明32.2 接口說明32.3 局部數(shù)據(jù)結(jié)構(gòu)32.4 流程圖32.5 以實(shí)例說明運(yùn)行過程4第1章1用戶命令接口課程設(shè)計(jì)1.1 題目分析用戶命令接口是為了用戶直接或間接控制自己的作業(yè),操作系統(tǒng)向用戶提供了命令接口。命令接口是用戶利用操作系統(tǒng)命令組織或控制作業(yè)的執(zhí)行或管理計(jì)算機(jī)系統(tǒng)。命令是在命令輸入界面上輸入,由系統(tǒng)在后臺執(zhí)

2、行,并將結(jié)果反映到前臺界面或者特定的文件內(nèi)。1.2 數(shù)據(jù)結(jié)構(gòu)1、為Windows操作系統(tǒng)建立一個(gè)兼容Unix命令的命令接口; 2、實(shí)現(xiàn)命令包括ls,cat,cp,mv,md,rd,cd,sort,more,print,命令的內(nèi)容與詳細(xì)格式請查閱uni命令手冊; 3、可以字符形式接收命令,執(zhí)行命令,然后顯示命令執(zhí)行結(jié)果。1.3 流程圖1.4 實(shí)現(xiàn)技術(shù)為實(shí)現(xiàn)上述設(shè)計(jì),采用C+語言,VS2008開發(fā)環(huán)境。具體采用的技術(shù)如下:(1)void lsFunction(string *lsinput,int lscount)函數(shù)實(shí)現(xiàn)顯示一個(gè)目錄中的文件和子目錄。如果失敗返回顯示“路徑可能不存在!” 。(2)

3、void catFunction(string *catinput,int catcount)函數(shù)實(shí)現(xiàn)打開文件并顯示內(nèi)容。如果失敗返回顯示“無法打開文件!”。(3)void cpFunction(string *cpinput,int cpcount)函數(shù)實(shí)現(xiàn)復(fù)制文件和目錄樹。如果成功返回顯示“復(fù)制成功”,否則顯示“文件或目錄可能不存在!” 。(4)void mvFunction(string *mvinput,int mvcount)函數(shù)實(shí)現(xiàn)將文件從一個(gè)目錄移到另一個(gè)目錄。如果成功返回顯示“成功” ,否則顯示“文件或目錄可能不存在!” 。(5)void mdFunction(string *

4、mdinput,int mdcount)實(shí)現(xiàn)在指定的目錄或文件下創(chuàng)建目錄。(6)void rdFunction(string *rdinput,int rdcount)函數(shù)實(shí)現(xiàn)刪除空目錄。如果成功返回顯示“刪除目錄成功” ,否則顯示“文件夾可能不存在或文件夾不為空!” 。(7)void cdFunction(string *cdinput,int cdcount)函數(shù)實(shí)現(xiàn)顯示當(dāng)前目錄的名稱或?qū)⑵涓?。如果失敗返回顯示“路徑可能不存在!” 。#include windows.h#include fstream#include string#include iomanip#include iost

5、reamusing namespace std;#define PRINTHEADHELP void cathelpFunction()coutPRINTCATHELPendl;infile.close();return f;*/void catFunction(string *catinput,int catcount)void printPath(void);if (1 = catcount)cout命令語法不正確!endl;printPath();if (2 = catcount)ifstream infile(catinput1.c_str(),ios:in);if (!infile)

6、/-3、cpvoid cphelpFunction()coutPRINTCPHELP cp 源文件路徑 目的文件路徑/另外在copy的過程可以進(jìn)行重命名操作,即cpinput2.c_str()void printPath(void);if (1 = cpcount)cout命令語法不正確!endl;printPath();elseif (!CopyFile(cpinput1.c_str(),cpinput2.c_str(),1)cout文件或目錄可能不存在t!endl;printPath();elsecout復(fù)制文件成功!endl;printPath();1.5 設(shè)計(jì)結(jié)論和心得操作系統(tǒng)的基本特

7、征是并發(fā)與共享。系統(tǒng)允許多個(gè)進(jìn)程并發(fā)執(zhí)行,并且共享系統(tǒng)的軟、硬件資源。為了最大限度的利用計(jì)算機(jī)系統(tǒng)的資源,除了更深的了解這個(gè)算法,而且對C語言進(jìn)行了復(fù)習(xí),而且其過程中有很多的知識點(diǎn)都不記得了,所以在此感謝在此過程中幫助過我的老師和同學(xué)。最后的感悟就是:只要你親自動(dòng)手,你就能學(xué)到知識。2 Linux代碼分析2.1 功能說明在操作系統(tǒng)中,有些進(jìn)程存在著相互制約的關(guān)系,這些制約關(guān)系來源于并行進(jìn)程的相互合作和資源共享。為了使合作進(jìn)程和資源共享進(jìn)程能協(xié)調(diào)一致的向前推進(jìn),必須使他們保持聯(lián)系,一邊相互了解。進(jìn)程相互間需要交換一定數(shù)量的信息,以便協(xié)調(diào)一致共同完成指定的任務(wù). 這種機(jī)制就叫做進(jìn)程間通信,或IPC

8、.在linux 中支持UNIX SYSTEM V 的三種通信機(jī)制: 消息隊(duì)列, 信號量和共享內(nèi)存. 現(xiàn)就消息隊(duì)列這種機(jī)制進(jìn)行分析.2.2 接口說明本程序的輸入?yún)?shù)為:1. struct ipc_perm key_t key; / 整型, 0表示private, 非0表示publicushort uid; / 資源擁有者的有效標(biāo)識ushort gid; / 資源擁有者所在組的有效標(biāo)識ushort cuid; / 資源創(chuàng)建者的有效標(biāo)識ushort cgid; / 資源創(chuàng)建者所在組的有效標(biāo)識 ushort mode; / 訪問模式ushort seq; / 序列號, 計(jì)算標(biāo)識符 ; 系統(tǒng)在創(chuàng)建消息隊(duì)

9、列的同時(shí)設(shè)定了訪問權(quán)限, 并返回一個(gè)標(biāo)識. 進(jìn)程通信時(shí)必須先傳遞該標(biāo)識, 待函數(shù)ipcperms()確認(rèn)權(quán)限后才可以訪問通信資源. 訪問權(quán)限由ipc_perm 結(jié)構(gòu)描述. 通過key可以得到引用標(biāo)識, 從而訪問通信資源. Key 為public , 則任何進(jìn)程都可以通過key得到引用標(biāo)識.2. struct msg struct msg *msg_next; /消息隊(duì)列中的下一個(gè) long msg_type; /消息的類型 char *msg_spot; /存放消息內(nèi)容的地址 time_t msg_time; /消息發(fā)送的時(shí)間 short msg_ts; /消息的長度 ; msg 結(jié)構(gòu)用來存放

10、消息的有關(guān)信息.3. struct msqid_ds struct ipc_perm msg_perm; struct msg *msg_first; /指向消息隊(duì)列的第一條消息 struct msg *msg_last; /指向消息隊(duì)列的最后一條消息 time_t msg_stime; / 最后發(fā)送時(shí)間 time_t msg_rtime; /最后接收時(shí)間 time_t msg_ctime; /最后修改時(shí)間 struct wait_queue *wwait; /寫消息進(jìn)程的等待隊(duì)列 struct wait_queue *rwait; /讀消息進(jìn)程的等待隊(duì)列 ushort msg_cbytes;

11、 /隊(duì)列中消息的字節(jié)數(shù) ushort msg_qnum; /隊(duì)列中的消息數(shù) ushort msg_qbytes; /隊(duì)列中消息的最大字節(jié)數(shù) ushort msg_lspid; / 最后一個(gè)發(fā)送消息的進(jìn)程的標(biāo)識號 ushort msg_lrpid; /最后一個(gè)接收消息的進(jìn)程的標(biāo)識號; 每一個(gè)msqid_ds 結(jié)構(gòu)代表一個(gè)消息隊(duì)列, 是進(jìn)程讀寫的信息的存儲(chǔ)空間。 static struct msqid_ds *msgqueMSGMNI; 定義了一個(gè)消息隊(duì)列數(shù)組msgque, 數(shù)組的元素類型是指向msqid_ds 結(jié)構(gòu)的指針。消息在隊(duì)列中是按到來的順序維護(hù)。進(jìn)程讀消息時(shí),這些消息按FIFO從隊(duì)列中移

12、去。4. struct msgbuf long mtype; /消息的類型 char mtext1; /消息的內(nèi)容; 存放消息的信息。5. struct wait_queue struct wait_queue *next; /指針指向等待隊(duì)列的下一個(gè) struct task_struct *task; /*task_struct 存放的是進(jìn)程控制塊的信息*/ ;wait_queue代表各種各樣的進(jìn)程等待隊(duì)列。2.3 局部數(shù)據(jù)結(jié)構(gòu)1. 初始化模塊:void _init msg_init (void)函數(shù)參數(shù):無函數(shù)返回類型:空函數(shù)功能:對消息隊(duì)列及各變量初始化 int id; for (id

13、= 0; id MSGMNI; id+) msgque id = (struct msqid_ds *) IPC_UNUSED; /* 給指向消息隊(duì)列的指針分配空間,標(biāo)志為IPC_UNUSED,定義見 linux/ipc.h : #define IPC_UNUSED(void ) -1)*/msgbytes = msghdrs = msg_seq = max_msqid = used_queues = 0;msg_lock = NULL;return;2. 發(fā)送消息模塊:static int real_msgsnd (int msqid, struct msgbuf *msgp, size_t

14、 msgsz, int msgflg)函數(shù)參數(shù): msqid: 整型, 消息的序列號; msgp: 指向msgbuf結(jié)構(gòu)的指針; msgsz: 消息的大??; msgflg: 消息的標(biāo)志符。函數(shù)返回類型:若消息正確的放入消息隊(duì)列,則返回0,否則返回各錯(cuò)誤信息。函數(shù)功能:將msgp所指向的消息緩沖區(qū)的內(nèi)容放入消息隊(duì)列中,且將標(biāo)志號設(shè)為msqid。其他調(diào)用可通過msqid訪問消息隊(duì)列。3. 接收消息模塊;static int real_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg)函數(shù)參數(shù):

15、 msqid: 整型, 消息的序列號; msgp: 指向msgbuf結(jié)構(gòu)的指針; msgsz: 消息的大小; msgtyp: 消息的類型; msgflg: 消息的標(biāo)志符。函數(shù)返回類型:若接收正確,返回接收到的消息字節(jié)數(shù)。否則,返回錯(cuò)誤信息。函數(shù)功能:從消息隊(duì)列中接收標(biāo)示號為msqid,內(nèi)容為msgp所指向的信息。4. 創(chuàng)建或獲得消息的控制模塊:asmlinkage int sys_msgget (key_t key, int msgflg)函數(shù)參數(shù): key:代表訪問通信資源的權(quán)限 msgflg:標(biāo)志位。函數(shù)返回類型:整型函數(shù)功能:傳遞鍵值,標(biāo)志位以及其他的參數(shù),獲得消息。5. 消息傳遞的控制

16、模塊:asmlinkage int sys_msgctl (int msqid, int cmd, struct msqid_ds *buf)函數(shù)參數(shù):msqid:消息序列號cmd:處理消息的命令buf:指向msqid_ds的指針函數(shù)返回類型:有關(guān)匯編連接的類型函數(shù)功能: 系統(tǒng)調(diào)用。處理各種有關(guān)消息處理的命令2.4 流程圖本程序的流程圖如圖2所示msgquemsgid_dsmsgmsg msg_perms msg_next msg_next msg_first msg_type msg_last msg_spot msg_stime msg_ts message圖:Linux消息隊(duì)列recei

17、verreceiversendersender1.1 Struct msgqid_dsmsgmsgmsg 消息傳遞的示意圖2.5 以實(shí)例說明運(yùn)行過程#include #include #include #include #define MAX_LINE 80#define MY_MQ_ID 1233typedef struct long type; int tag; int * m; /download_arg_t *; /upload_arg_t *;MY_TYPE_T;int main( ) int msgid,ret; int b; /create the message queue w

18、ith the id MY_MQ_ID msgid=msgget( MY_MQ_ID,0666|IPC_CREAT ); if( msgid=0 ) printf( Created a Message Queue,message queue identifier is %dn,msgid ); /modify the size of message queue struct msqid_ds buf; ret=msgctl( msgid,IPC_STAT,&buf ); printf( The origianl size of queue is %dn,buf.msg_qbytes ); buf.msg_qbytes=1000; ret=msgctl( msgid,IPC_SET,&buf ); if( ret=0 ) printf( Size sucessfully changed for queue,message queue identifier is %dn,msgid ); /send a message b = 5; MY_TYPE_T myMessa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論