freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

操作系統(tǒng)課程設(shè)計(jì)之消息函數(shù)的分析論文-資料下載頁(yè)

2025-06-24 06:01本頁(yè)面
  

【正文】 t ipc_perm *ipcp。 lock_kernel()。//do { } while(0) //加鎖 if (msqid 0 || cmd 0) //檢查參數(shù),如果參數(shù)錯(cuò)誤就進(jìn)行出錯(cuò)處理 goto out。 err = EFAULT。 //根據(jù)cmd的不同進(jìn)行不同的處理 switch (cmd) { case IPC_INFO: case MSG_INFO: //返回所需要的信息到指定的結(jié)構(gòu)struct msginfo中 if (!buf) goto out。//返回 { struct msginfo msginfo。 /* buffer for msgctl calls IPC_INFO, MSG_INFO */ = MSGMNI。 = MSGMAX。 = MSGMNB。 = MSGMAP。 = MSGPOOL。 = MSGTQL。 = MSGSSZ。 = MSGSEG。 if (cmd == MSG_INFO) { //假如cmd是MSG_INFO而不是IPC_INFO時(shí),還要包括一些額外信息 = used_queues。 = msghdrs。 = msgbytes。 } err = EFAULT。 if (copy_to_user (buf, amp。msginfo, sizeof(struct msginfo))) goto out。 //復(fù)制是由copy_to_user函數(shù) err = max_msqid。 goto out。 } case MSG_STAT: //返回所需要的統(tǒng)計(jì)信息—它的當(dāng)前和最大容量、它的最近的讀者和寫(xiě)者的PID,等等。 If (!buf) goto out。 err = EINVAL。 if (msqid max_msqid) goto out。 msq = msgque[msqid]。 if (msq == IPC_UNUSED || msq == IPC_NOID) goto out。 err = EACCES。 if (ipcperms (amp。msqmsg_perm, S_IRUGO)) //缺少訪問(wèn)該隊(duì)列的許可,則返回 goto out。 id = (unsigned int) msq * MSGMNI + msqid。 //計(jì)算”完全的”標(biāo)識(shí)符—序列編號(hào) = msqmsg_perm。 = msqmsg_stime。 = msqmsg_rtime。 = msqmsg_ctime。 = msqmsg_cbytes。 = msqmsg_qnum。 = msqmsg_qbytes。 = msqmsg_lspid。 = msqmsg_lrpid。 //把請(qǐng)求的信息復(fù)制到一個(gè)臨時(shí)變量中 err = EFAULT。 if (copy_to_user (buf, amp。tbuf, sizeof(*buf))) //再把臨時(shí)變量復(fù)制回調(diào)用者的緩存 goto out。 err = id。 //返回”完全的”標(biāo)識(shí)符—序列編號(hào) goto out。//剩下三種情況:IPC_SET、IPC_STAT,和IPC_RMID,與上述情況都在switch語(yǔ)句里被完全的處理不同,在此僅進(jìn)行部分處理 case IPC_SET: //緩沖區(qū)非空,就將它復(fù)制到tbuf里以便后面函數(shù)的進(jìn)一步處理 if (!buf) goto out。 err = EFAULT。 //err被再次賦值 if (!copy_from_user (amp。tbuf, buf, sizeof (*buf))) err = 0。 break。 case IPC_STAT: //只檢查緩沖區(qū)是否非空 if (!buf) goto out。 break。 //最后一種情形,IPC_RMID在這個(gè)語(yǔ)句中不工作;它所有的工作都推遲到后邊的函數(shù)中完成。 } id = (unsigned int) msqid % MSGMNI。 //從msqid里提取出數(shù)組下標(biāo) msq = msgque [id]。 err = EINVAL。 if (msq == IPC_UNUSED || msq == IPC_NOID) //是否在指定的下標(biāo)處存在著一個(gè)有效的消息隊(duì)列 goto out。 err = EIDRM。 if (msq != (unsigned int) msqid / MSGMNI) //在指定的下標(biāo)處存在著一個(gè)有效的消息隊(duì)列 goto out。 ipcp = amp。msqmsg_perm。 switch (cmd) { case IPC_STAT: //把統(tǒng)計(jì)信息復(fù)制進(jìn)調(diào)用者的緩沖區(qū)里,與先前MSG_STAT的情形非常類(lèi)似 err = EACCES。 if (ipcperms (ipcp, S_IRUGO)) //檢測(cè)用戶是否有從隊(duì)列中讀出的許可 goto out。 = msqmsg_perm。 = msqmsg_stime。 = msqmsg_rtime。 = msqmsg_ctime。 = msqmsg_cbytes。 = msqmsg_qnum。 = msqmsg_qbytes。 = msqmsg_lspid。 = msqmsg_lrpid。 //把請(qǐng)求的信息復(fù)制到一個(gè)臨時(shí)變量中 err = EFAULT。 if (!copy_to_user (buf, amp。tbuf, sizeof (*buf))) //再把臨時(shí)變量復(fù)制回調(diào)用者的緩存, err = 0。 goto out。 case IPC_SET: //設(shè)置相應(yīng)的消息隊(duì)列的參數(shù) err = EPERM。 //為了操縱消息隊(duì)列的參數(shù),調(diào)用者必須擁有該隊(duì)列或者擁有CAP_SYS_ADMIN 權(quán)能 if (currenteuid != ipcpcuid amp。amp。 currenteuid != ipcpuid amp。amp。 !capable(CAP_SYS_ADMIN)) /* We _could_ check for CAP_CHOWN above, but we don’t */ goto out。 if ( MSGMNB amp。amp。 !capable(CAP_SYS_RESOURCE)) goto out。 //被選擇的參數(shù)根據(jù)調(diào)用者提供的tbuf被設(shè)置 msqmsg_qbytes = 。 ipcpuid = 。 ipcpgid = 。 ipcpmode = (ipcpmode amp。 ~S_IRWXUGO) | (S_IRWXUGO amp。 )。 msqmsg_ctime = CURRENT_TIME。 err = 0。 goto out。 case IPC_RMID: //如果函數(shù)調(diào)用者有權(quán)限,就刪除這個(gè)消息隊(duì)列 err = EPERM。 if (currenteuid != ipcpcuid amp。amp。 currenteuid != ipcpuid amp。amp。 !capable(CAP_SYS_ADMIN)) goto out。 //調(diào)用者擁有該隊(duì)列或者有CAP_SYS_ADMIN權(quán)能 freeque (id)。 //隊(duì)列用freeque函數(shù)調(diào)用來(lái)釋放 err = 0。 goto out。 default: err = EINVAL。 goto out。 }out: unlock_kernel()。//do { } while(0) //解鎖 return err。}釋放隊(duì)列空間函數(shù)freeque:static void freeque (int id)//刪除一個(gè)隊(duì)列并釋放相應(yīng)的msgque元素項(xiàng){ struct msqid_ds *msq = msgque[id]。 struct msg *msgp, *msgh。 msq++。 msg_seq = (msg_seq+1) % ((unsigned)(131)/MSGMNI)。 /* increment, but avoid overflow */ msgbytes = msqmsg_cbytes。 if (id == max_msqid) while (max_msqid amp。amp。 (msgque[max_msqid] == IPC_UNUSED))。 //如果正在被釋放的是最高的被使用項(xiàng),freeque函數(shù)將盡可能地減低max_msqid。 //循環(huán)之后,max_msqid將再次成為被使用的msgque項(xiàng)的最高下標(biāo)值, //或者在所有元素項(xiàng)都沒(méi)有使用時(shí)變成0。 msgque[id] = (struct msqid_ds *) IPC_UNUSED。 //msgque數(shù)組的元素被標(biāo)識(shí)成為未使用 used_queues。 while (waitqueue_active(amp。msqrwait) || waitqueue_active(amp。msqwwait)) { //循環(huán)喚醒所有正等待讀出或?qū)懭脒@個(gè)隊(duì)列的進(jìn)程,警告它們?cè)撽?duì)列即將消失 wake_up (amp。msqrwait)。 wake_up (amp。msqwwait)。 schedule()。 //調(diào)用schedule函數(shù)來(lái)賦予被喚醒了的進(jìn)程運(yùn)行的機(jī)會(huì) } for (msgp = msqmsg_first。 msgp。 msgp = msgh ) { msgh = msgpmsg_next。 msghdrs。 kfree(msgp)。 } kfree(msq)。 //釋放}心得體會(huì)課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),,我們小組各成員都感觸頗多。從選題到定稿,從理論到實(shí)踐,在整整五天晚上的日子里,學(xué)到很多很多的的東西,不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在這次課程設(shè)計(jì)中,我們小組通過(guò)從各個(gè)方面查找資料,知道了在Linux操作系統(tǒng)中進(jìn)程間相互通訊的過(guò)程。小組成員通過(guò)對(duì)Linux的消息傳遞代碼的分析,了解Linux操作系統(tǒng)中用于消息傳遞的msgget、msgsnd、msgrcv、msgctl的執(zhí)行過(guò)程。小組成員通過(guò)對(duì)Linux的消息傳遞代碼的分析鍛煉了我們分析大型軟件代碼的能力。通過(guò)使用Windows下的源代碼分析工具Source Insight使我們熟練掌握了Source Insight這一軟件,并且熟練掌握了分析大型軟件代碼的步驟。 通過(guò)與同組同學(xué)的合作,加強(qiáng)了我們的團(tuán)體合作能力。第一次做對(duì)Linux這種大型軟件代碼的分析課程設(shè)計(jì),我們組成員遇到了一些問(wèn)題和看到大型軟件的編程習(xí)慣,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故,我們組成員也深刻得感受到了我們平時(shí)的編程習(xí)慣與良好的編程習(xí)慣相差甚遠(yuǎn),通過(guò)這次課程設(shè)計(jì)之后小組成員決定在以后的編程過(guò)程中養(yǎng)成良好的編程習(xí)慣,這樣有助于自己所編的程序清晰明了便于改錯(cuò)還有助于別人來(lái)理解你的程序。同時(shí)通過(guò)這次課程設(shè)計(jì)我們形成了通過(guò)從各方面查找資料來(lái)豐富自己的知識(shí)的能力。 最后這次課程設(shè)計(jì)順利完成了,在設(shè)計(jì)中遇到的問(wèn)題,通過(guò)我們小組成員討論和其他小組的幫助下解決。同時(shí),在老師您的身上我學(xué)得到很多實(shí)用的知識(shí),在此我們小組表示感謝!同時(shí),對(duì)給過(guò)我們小組幫助的同學(xué)表示感謝! 參考文獻(xiàn)[1] 計(jì)算機(jī)操作系統(tǒng)(第三版),湯小丹等,西安電子科技大學(xué)出版社, 2007年5月[2] 操作系統(tǒng)習(xí)題解答與實(shí)驗(yàn)指導(dǎo),王煜、張明、劉振鵬 ,高等教育出版社, 2004年12月[3] 操作系統(tǒng)原理實(shí)驗(yàn),周蘇、金海溶、李潔、科學(xué)出版社, 2003年12月[4] 操作系統(tǒng)教程題解與實(shí)驗(yàn)指導(dǎo),孟靜,高等教育出版社, 2002年6月[5] 操作系統(tǒng)教程——原理和實(shí)例分析,孟靜,高等教育出版社, 2001年9月[6] VC++深入詳解,孫鑫、余安萍,電子工業(yè)出版社,2006年[7] VC++程序設(shè)計(jì)解析與訓(xùn)練,祁云嵩,華東理工大學(xué)出版社,2005年[8] 譚浩強(qiáng),張基溫.C/C++程序設(shè)計(jì)教程[M].北京:高等教育出版社.2002年[9] Jay Hilyard等著,C,中國(guó)電力出版社
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1