




免費(fèi)預(yù)覽已結(jié)束,剩余21頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)課程設(shè)計報告 題目:一個小型的操作系統(tǒng) 班級:計122(杏) 學(xué)號:1213023075 姓名:賈蘇 日期:2014/06/231. 實驗平臺(1)軟件平臺: 開發(fā)系統(tǒng)平臺:Windows 7 (64) Microsoft visual c+ 6.0 測試系統(tǒng)平臺:Windows 7 (64)(2) 硬件平臺: cpu:AMD A6-3420 APU 內(nèi)存:4GB 硬盤:500G2.所需實現(xiàn)的功能及相應(yīng)的闡述:(1)進(jìn)程調(diào)度管理 為了貼切現(xiàn)實中的os,采用RR(輪轉(zhuǎn)調(diào)度算法),且不提供用戶顯式的選擇調(diào)度算法,即對用戶是透明的。 現(xiàn)實中的處理器主頻為1Ghz3Ghz,選取中間點為1.5Ghz,得時間片大小為0.7ns ,為方便計算*10,則時間片大小定為7ns。 假設(shè)進(jìn)程之間的調(diào)度和切換不耗費(fèi)cpu時間。(2)死鎖的檢測與處理 檢測當(dāng)然采用的是 銀行家算法 處理:讓用戶選擇kill一個進(jìn)程,釋放他所占有的所有資源。(3)虛擬分頁調(diào)度管理 虛擬分頁:給出的是邏輯值 訪問磁盤 將那個數(shù)據(jù)塊放入到內(nèi)存中內(nèi)存中的地址采用一定的算法相對應(yīng)于磁盤的地址。 特規(guī)定 訪存采用的是 按字節(jié)尋址 內(nèi)存的大小 128KB 外存的大小 1MB 即整個系統(tǒng)可以提供1MB的邏輯地址空間供進(jìn)程進(jìn)行訪問(在地址總線足夠掃描內(nèi)存的情況下)。虛擬地址映射采用:直接映射法規(guī)定的8kB為一個頁面,故內(nèi)存有16個頁面,外存有128個頁面。如果產(chǎn)生了內(nèi)存已滿,便會產(chǎn)生缺頁中斷,淘汰采用FIFO算法,利用一個隊列來做。部分內(nèi)外存的對應(yīng)表00,128,2*128+0.11,129,2*128+1.22,130,2*128+2.16127,128+16,2*128+16.(4)I/O中斷處理 設(shè)中斷來自兩個方面: 1.DMA輸送開始和結(jié)束時的中斷 設(shè)定一個宏 定義為DMA一次傳輸?shù)臄?shù)據(jù)量的大小-DmaNum假定為10kb每次 DMA開始:耗費(fèi)1ns cpu時間進(jìn)行中斷處理 DMA結(jié)束:耗費(fèi)2ns cpu時間進(jìn)行中斷處理 由操作系統(tǒng)課程知,DMA傳輸數(shù)據(jù)時不需要CPU的干預(yù)。2. 隨機(jī)的中斷 發(fā)生外部隨機(jī)中斷,cpu無條件的立即響應(yīng),并執(zhí)行中斷處理程序,同樣的假設(shè)中斷處理程序的調(diào)度和切換不耗費(fèi)cpu時間。(5)內(nèi)存地址越界或內(nèi)存不足進(jìn)程訪問內(nèi)存時超過了進(jìn)程所要的最大值,此時發(fā)生中斷,已達(dá)到內(nèi)存保護(hù)的功能。內(nèi)存不足時即為當(dāng)前的動態(tài)地址重定位寄存器中的值+進(jìn)程所需的內(nèi)存大小超過了內(nèi)存的上限,此時進(jìn)行內(nèi)存緊湊,同時修改被移動的進(jìn)程中的各個有關(guān)參數(shù)。3.總體設(shè)計 開始 內(nèi)存管理查看運(yùn)行情況開始運(yùn)行外存空間查看查看cpu運(yùn)行內(nèi)存空間查看死鎖檢測與解除進(jìn)程信息查看4.程序所需的數(shù)據(jù)結(jié)構(gòu)及其抽象過程 先定義本次操作系統(tǒng)外設(shè)的資源,假設(shè)有A類資源10個,B類資源5個,C類資源6個-NeedRescourse; 作業(yè)中的各個進(jìn)程都需要一個代號-ProcessName,各個進(jìn)程到來的時間不同,故需要記錄一下-ArriveTime,每個進(jìn)程所需要的cpu時間是不夠的-NeedCpuTime,每個進(jìn)程所需的內(nèi)存空間大小是不一樣的-NeedMem。 各個進(jìn)程中的任務(wù)是不同的故需要預(yù)先設(shè)定本進(jìn)程中所要執(zhí)行的操作類型-OpKind,如果是計算型的直接給出所需要的cpu時間即可,如果是I/O型的還需要給出所傳輸?shù)臄?shù)據(jù)量的大小-NeedTranDataNum,在此可以給OpKind做一個union型的結(jié)構(gòu)。 多道程序程序在運(yùn)行的過程中需要對進(jìn)程所需內(nèi)存的地址進(jìn)行動態(tài)地址重定位,故在系統(tǒng)之中需要設(shè)置一個動態(tài)地址重定位寄存器,其中的內(nèi)容是下次進(jìn)程可以使用的內(nèi)存始址-DynReg。抽象結(jié)果: struct Processchar ProcessName10;/進(jìn)程的名字 int ArriveTime; / ns級別int NeedCpuTime; /此進(jìn)程所需要的時間int NeedMem; /所需要的cpu時間 FlagForOp OpKind; /用于指示是何種操作 int NeedTranDataNum; /給IO用的數(shù)據(jù)塊int OpCpus; /計算類型的操作所需的cpu時間int NeedRescourse3 ;/需要資源的數(shù)目 NULL代表不需要使用Process *next;5.詳細(xì)設(shè)計1.進(jìn)程信息查看依次遍歷全部的鏈表,并將它們的信息依次打印出來。實現(xiàn)函數(shù)名:void ShowProcessInfo()2.死鎖的檢測和解除假定本系統(tǒng)中的各個所需資源均是獨(dú)占型資源,在進(jìn)程運(yùn)行的過程中不再釋放,故只需要遍歷鏈表將各個進(jìn)程中所需的資源統(tǒng)計出來,只要不大于系統(tǒng)中預(yù)設(shè)的即可,一旦進(jìn)程所需的資源大于系統(tǒng)中的最大量,給予用戶選擇kill一進(jìn)程,已達(dá)到釋放資源的目的。死鎖檢測函數(shù):void DeedLock() void DeedLock_LookNeedRescourse()死鎖解除函數(shù):void DeedLock_KillProcess()3. 內(nèi)存空間查看查看各個進(jìn)程所占用的內(nèi)存的空間,借助于DynReg這個全局變量實行內(nèi)存空間的動態(tài)重定位。實現(xiàn)函數(shù):void LookMem()4. 查看CPU運(yùn)行以CPU的角度,查看作業(yè)的運(yùn)行情況,實現(xiàn)函數(shù):void LookCpu() void LookCpu_ShowRunningProcess()5. 外存空間查看外存空間是用戶的工作區(qū)間,故只要遍歷整個進(jìn)程鏈表,統(tǒng)計出所有進(jìn)程占有的全部空間即可。實現(xiàn)函數(shù):void LookDiskMem()6. 查看運(yùn)行查看系統(tǒng)運(yùn)行中各個資源的使用情況:實現(xiàn)函數(shù):void ShowRunningProcess() void ShowRunningProcess_CalculateCpuNeed(int*,int)7. 內(nèi)存管理缺頁調(diào)度算法:FIFO(借助于循環(huán)隊列實現(xiàn))實現(xiàn)函數(shù):void MemToDiskMem()6.程序運(yùn)行和調(diào)試1.打開程序的初始界面:按系統(tǒng)提示輸入進(jìn)程數(shù),及其相關(guān)的各個參數(shù)2.輸入完成后的主界面:用戶可以按下相關(guān)的選擇鍵實施有關(guān)的各個操作。3. 按下1 查看各個進(jìn)程的信息可以看到剛剛輸入的各個進(jìn)程的有關(guān)信息4.按下25. 按下3 查看運(yùn)行時CPU的使用情況可見此時系統(tǒng)是安全的。系統(tǒng)出差提示按下1顯示當(dāng)前各個進(jìn)程所需的資源然后kill進(jìn)程1后在查看一下作業(yè)中的進(jìn)程,發(fā)現(xiàn)被kill的進(jìn)程沒有的,實現(xiàn)了此功能。6. 按下4 查看內(nèi)存的使用情況7. 按下5 查看外存空間8. 按下6 查看運(yùn)行情況9. 按下7 產(chǎn)看內(nèi)存使用情況(1) 沒有產(chǎn)生缺頁 (2) 產(chǎn)生缺頁 10.按下9 退出此系統(tǒng)7.遇到的問題(1) 自己編寫映射表相當(dāng)?shù)睦щy,一度想改用Java語言,在于對C+語言的了解不夠。(2) 出錯處理沒有完全做完,做的不夠精細(xì),很多地方直接結(jié)束(3) 對用戶輸入的數(shù)據(jù)做的類型檢查不夠充分(4) delete job時總是出現(xiàn)系統(tǒng)錯誤,后debug發(fā)現(xiàn),由于對象之中存在不為空的指針,導(dǎo)致出錯,故再釋放指針?biāo)伎臻g后系統(tǒng)正常運(yùn)行。8. 源代碼#include#include#include#include#includeCirQueue.h /循環(huán)隊列的頭文件using namespace std;#define MAXMEM 128 /定義本次操作系統(tǒng)的最大內(nèi)存容量#define MAXDISKMEM 1024 /定義本次操作系統(tǒng)的最大外存容量 #define YE 10 /定義本次操作系統(tǒng)的分頁大小 并 以此實現(xiàn) 虛擬存儲int UsedMAXMEM=0;int UsedMAXDISKMEM=0;/定義進(jìn)程可能用到的外部資源 #define A 10#define B 5#define C 6 /cpu #define RR 7 /定義時間片大小為7ns#define BEFOREDMA 1 /DMA之前所需的cpu時間 #define AFTERDMA 2 /DMA之后所需的cpu時間 #define ONEDMANUM 10/DMA一次最多傳送10kb的數(shù)據(jù) enum FlagForOpIO,Calculate,others; int DynReg=0;/定義用于描述動態(tài)地址重定位寄存器的全局變量 struct Processchar ProcessName10;/進(jìn)程的名字 int ArriveTime;/ ns級別int NeedCpuTime;/此進(jìn)程所需要的時間int NeedMem;/所需要的cpu時間 FlagForOp OpKind;/用于指示是何種操作 int NeedTranDataNum;/給IO用的數(shù)據(jù)塊int OpCpus;/計算類型的操作所需的cpu時間/假設(shè)others不需要其他的各個操作。 int NeedRescourse3;/需要資源的數(shù)目 NULL代表不需要使用 0a. Process *next;class JOBProcess *p;Process *head;Process *head1;/建立一個備用的鏈表/Process *wait,*runing; /wait 為等待鏈表 running是正在運(yùn)行的進(jìn)程 public:JOB()head1=p=head=NULL;/初始化為空 coutPlease waiting .The System is initial.endl;Sleep(2000);/暫停一秒 maybe Sleep() coutSystem is already. Now you should enter information of you job.endl;int n;coutenter your jobs process num.n;while(n)p=new Process();coutplease enter the name of process.p-ProcessName;coutplease enter the arrivetime of process.p-ArriveTime;coutplease enter the NeedCpuTime of process.p-NeedCpuTime;coutplease enter the NeedMem of process.p-NeedMem;while(p-NeedMem128)coutThis System cant not accept your job! Maybe your job is too large! Please enter a num 128p-NeedMem;coutplease enter the operation of process.0 to TranDiskNum ,1 to cpunn;if(nn=0)coutplease enter the NeedTranDataNum.p-NeedTranDataNum;p-OpKind=IO;elsecoutplease enter the OpCpus.p-OpCpus;p-OpKind=Calculate;coutPLease enter the A,B or C you needendl;for(int i=0;ip-NeedRescoursei;p-next=NULL;/尾結(jié)點為空 表示 一個節(jié)點的完成 下面進(jìn)行插入鏈表的工作 head=SortLinkTable(head,p);n-; /whileLinkCopy();/將本次整理好的鏈表依次賦值賦給備用鏈表Provide_Same_Process_Name();/檢查重名現(xiàn)象void Provide_Same_Process_Name();void VisitLinkTable();Process* SortLinkTable(Process*,Process*);void BeginRunning();void ShowProcessInfo();void DeedLock();void DeedLock_KillProcess();void DeedLock_LookNeedRescourse();void LookCpu();void LookCpu_ShowRunningProcess();void LookMem();void ShowRunningProcess();void ShowRunningProcess_CalculateCpuNeed(int*,int);void LookDiskMem();void LookMem_ChangeMem();bool CheckMem();void LookDiskMem_Change();void LinkCopy(); void MemToDiskMem(); JOB() delete head; delete head1; delete p; ;JOB *job;/設(shè)置全局變量 void JOB:Provide_Same_Process_Name() system(cls); char buffer10; Process *temp=head1; Process *temp1=head1; while(temp) temp1=temp-next; while(temp1) if(strcmp(temp-ProcessName,temp1-ProcessName)=0) coutMini_OperationSystem had detect the same name process in your job!endl; coutThis System cant accept this sitution.Please Rename your Process! nThanks for your corporation!endl; coutThis is ALL your process name:endl; VisitLinkTable(); coutEnter 1 to rename the former,0 to rename the later!n; coutNow Enter new Name:buffer; strcpy(temp1-ProcessName,buffer); else cinbuffer; strcpy(temp-ProcessName,buffer); /end if temp1=temp1-next; /end while temp1 temp=temp-next; /whilevoid AgainEnterJOB()system(cls);delete job;job=new JOB(); void JOB:VisitLinkTable()/不加JOB前綴的時候編譯不過 加上代表此函數(shù)是JOBclass之中的 while(head1)coutProcessNamenext; coutnNow , You can see The List to checkout.endl;void JOB:LinkCopy() Process *temp=NULL,*temp2=head; if(head1=NULL) coutLinkCopy() is Here!next=NULL; head1=NULL; while(temp2) /apply a new node temp=new Process(); strcpy(temp-ProcessName,temp2-ProcessName); temp-ArriveTime=temp2-ArriveTime; temp-NeedCpuTime=temp2-NeedCpuTime; temp-NeedMem=temp2-NeedMem; if(temp2-OpKind=IO) temp-OpKind=IO; temp-NeedTranDataNum=temp2-NeedTranDataNum; else temp-OpKind=Calculate; temp-OpCpus=temp2-OpCpus; for(int i=0;iNeedRescoursei=temp2-NeedRescoursei; /apply end temp-next=NULL; /coutcopy is right!next)/尋找到最后一個節(jié)點 不斷的循環(huán)退不出去k=k-next;k-next=temp; / coutcopy is right!next; /while if(head1=NULL) coutLinkCopy() is out!endl; system(pause);void JOB:MemToDiskMem()system(cls); CirQueue q(16); /一共定義的16個頁面 q.EnQueue(e); int *Mem;int count=0; /記錄下進(jìn)程的數(shù)目Process *temp_head1=head1;while(temp_head1) count+; temp_head1=temp_head1-next; temp_head1=head1; Mem=new intcount; int temp_count=0;while(temp_head1) int Begin=0; coutProcess: ProcessName memery use situation:NeedMem; int k=0; /所需的頁面數(shù)目 if(Begin%YE=0) k=Begin/YE; else k=Begin/YE+1; Memtemp_count+=k; coutk頁被占用!next;/end while coutendl;temp_head1=head1;coutWant to see 缺頁調(diào)度過程 Y/N. option;if(option=y|option=Y)for(int i=0;icount;i+)AllTotal+=Memi;for(int j=0;jMemi;j+) if(q.EnQueue(true) temp_count=0; while(temp_countnext; temp_count+; coutProcess :ProcessName need mem is loading.okendl; temp_head1=head1;else temp_count=0; while(temp_countnext; temp_count+; coutProcess :ProcessName need mem is loading error 缺頁調(diào)度endl; temp_head1=head1;total+; bool flag=q.DeQueue();if(q.EnQueue(true) coutProcess :ProcessName need mem is loading ok 缺頁調(diào)度endl; /for2coutendl; /for1 cout一共產(chǎn)生了:total 次缺頁中斷. n缺頁中斷率為:(float)total/AllTotal%next;run=head1;/還原運(yùn)行鏈表/建立一個映射表char *Run_Process_Name=new char*count;/申請一個動態(tài)的二維表for(int i=0;iProcessName); run=run-next;run=NULL; int *Run_Process_CpuNeed=new intcount;/映射表建立完畢 /計算各個進(jìn)程中所需的cpu時間ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process *priorNode=NULL;/Process *tail=head;while(true)/int time11=wait-ArriveTime;if(wait&NowTime=wait-ArriveTime)if(run=NULL)run=wait;priorNode=run;else/連接到尾部 Process *temp=run;while(temp-next!=priorNode)/尋找到前驅(qū)節(jié)點temp=temp-next;temp-next=wait;/將結(jié)點連接上鏈表priorNode=wait;/wait-next=run;wait=wait-next;/釋放一個結(jié)點priorNode-next=run;/連接上頭部形成 循環(huán)鏈表 if(run)run=run-next; /重新調(diào)度coutNowTimeNowTime+RR Process :ProcessName is Runningendl;coutcpu 調(diào)度下一個運(yùn)行的進(jìn)程。endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射 按名取出所需運(yùn)行的時間 int ALLNeedCpu;for(int i=0;iProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi; ALLNeedCpu-=RR;/減去本次運(yùn)行的時間if(ALLNeedCpu0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫回到數(shù)組中 保持一致性else /此節(jié)點已經(jīng)做完了 請直接釋放 if(run-next=run)run=NULL;elseProcess *k=run;while(k-next!=run)/尋找當(dāng)前運(yùn)行節(jié)點的前一個結(jié)點 k=k-next;k-next=k-next-next; run=k;/ end if(run)if(wait=NULL&run=NULL)/沒有等待CPU的進(jìn)程了 和 沒有正在運(yùn)行的進(jìn)程 滿足退出的要求 -退出break;NowTime+;/whilesystem(pause);LinkCopy();/ /將受損的鏈表修復(fù) void JOB:ShowRunningProcess()system(cls);int NowTime=0;Process *run=head1;/臨時試用一下 最終需要?dú)w還為NULLProcess *wait=head1;/ dsvrfgvregrefswgvregegsdgreint count=0;while(run)/計算等待運(yùn)行的進(jìn)程的個數(shù) count+; run=run-next;run=head1;/還原運(yùn)行鏈表/建立一個映射表char *Run_Process_Name=new char*count;/申請一個動態(tài)的二維表for(int i=0;iProcessName); run=run-next;run=NULL; int *Run_Process_CpuNeed=new intcount;/映射表建立完畢ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process *priorNode=NULL;while(true)/int time11=wait-ArriveTime;if(wait&NowTime=wait-ArriveTime)if(run=NULL)run=wait;priorNode=run;else/連接到尾部 Process *temp=run;while(temp-next!=priorNode)/尋找到前驅(qū)節(jié)點temp=temp-next;temp-next=wait;/將結(jié)點連接上鏈表priorNode=wait;/wait-next=run;wait=wait-next;/釋放一個結(jié)點priorNode-next=run;/連接上頭部形成 循環(huán)鏈表 if(run)run=run-next; /重新調(diào)度coutNowTimeNowTime+RR Process :ProcessName is Runningendl;coutNeedRescourse: ANeedRescourse0 BNeedRescourse1 cNeedRescourse2 is using.endl;coutcpu 調(diào)度下一個運(yùn)行的進(jìn)程。endl;NowTime+=RR;/依據(jù)上面建設(shè)的映射 按名取出所需運(yùn)行的時間 int ALLNeedCpu;for(int i=0;iProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi; ALLNeedCpu-=RR;/減去本次運(yùn)行的時間if(ALLNeedCpu0)Run_Process_CpuNeedi=ALLNeedCpu;/重新寫回到數(shù)組中 保持一致性else /此節(jié)點已經(jīng)做完了 請直接釋放 if(run-next=run)run=NULL;elseProcess *k=run;while(k-next!=run)/尋找當(dāng)前運(yùn)行節(jié)點的前一個結(jié)點 k=k-next;k-next=k-next-next; run=k;/ end if(run)if(wait=NULL&run=NULL)/沒有等待CPU的進(jìn)程了 和 沒有正在運(yùn)行的進(jìn)程 滿足退出的要求 -退出break;NowTime+;/whilesystem(pause);LinkCopy();/ /將受損的鏈表修復(fù) void JOB:ShowRunningProcess_CalculateCpuNeed(int*Run_Process_CpuNeed,int count) Process *temp=head1; for(int i=0;iNeedCpuTime;if(temp-OpKind=IO)if(temp-NeedTranDataNum%ONEDMANUM=0)ALLNeedCpu+=(temp-NeedTranDataNum/ONEDMANUM)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=(temp-NeedTranDataNum/ONEDMANUM+1)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=temp-OpCpus;Run_Process_CpuNeedi=ALLNeedCpu;temp=temp-next; void JOB:ShowProcessInfo() system(cls);Process *temp=head1;int count=0;while(temp)cout-The count+1 process infoendl;cout Name: ProcessName.endl;cout ArriveTime: ArriveTime.endl;cout NeedCpuTime: NeedCpuTime.endl;cout NeedMem: NeedMem.endl;cout OpKind: OpKind.endl;cout NeedRescourse: A: NeedRescourse0,B: NeedRescourse1,C: NeedRescourse2next;coutn;count+;coutenter anykey return main() .NeedRescourse0; LocalB+=temp-NeedRescourse1; LocalB+=temp-NeedRescourse2; temp=temp-next;if(LocalAA|LocalBB|LocalCC) coutNeedRescourse is over!endl; coutEnter 1 to See NeedRescourse, else to main()!n; if(n=1) DeedLock_LookNeedRescourse(); else coutYour JOb is ok! System Now is safe!endl;system(pause);void JOB:DeedLock_LookNeedRescourse() Process* temp=head1;coutnNeedRescourse: A B Cn; while(temp) coutProcessName NeedRescourse0 NeedRescourse1 NeedRescourse2next;system(pause);coutAre you want to Kill one Process to Release NeedRescourse.Y/Noption;if(option=Y|option=y) DeedLock_KillProcess(); void JOB:DeedLock_KillProcess() Process *temp=head; coutEnter 1,2,.to Kill 1th,2th,.Process.n; int count=1; while(countnext; if(count=1) head=head-next; else Process *temp2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物買賣合同范文
- 上海市技術(shù)開發(fā)合同范本
- 豬場租賃合同中二零二五年消毒室改造條款
- 公司租車協(xié)議合同標(biāo)準(zhǔn)文本
- 班級環(huán)?;顒拥膶嵺`方案計劃
- 公司退伙合同標(biāo)準(zhǔn)文本
- 2025新版高級經(jīng)理聘請合同書
- 軍工電源采購合同標(biāo)準(zhǔn)文本
- 2025年農(nóng)村商鋪租賃合同協(xié)議
- 傳授廚藝合同標(biāo)準(zhǔn)文本
- 2025屆高考作文備考訓(xùn)練:局中局外人生如棋
- 山東省威海市乳山市銀灘高級中學(xué)2024-2025學(xué)年高一下學(xué)期3月月考思想政治試題(含答案)
- 中華武術(shù)-太極知到課后答案智慧樹章節(jié)測試答案2025年春武漢城市職業(yè)學(xué)院
- 2023-2024學(xué)年廣東省深圳市龍崗區(qū)八年級下學(xué)期期中語文試題及答案
- 小紅書食用農(nóng)產(chǎn)品承諾書示例
- 《建筑工程設(shè)計文件編制深度規(guī)定》(2022年版)
- 23J916-1:住宅排氣道(一)
- 職業(yè)衛(wèi)生管理制度和操作規(guī)程匯編
- JJG 162-2019飲用冷水水表 檢定規(guī)程(高清版)
- 紡織品生產(chǎn)企業(yè)代碼(MID)申請表
- 冠心病的護(hù)理 PPT課件
評論
0/150
提交評論