《《操作系統(tǒng)原理》課程設(shè)計(jì)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《《操作系統(tǒng)原理》課程設(shè)計(jì)報(bào)告(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
《操作系統(tǒng)原理》課程設(shè)計(jì)報(bào)告
姓 名:
學(xué) 號(hào):
指導(dǎo)老師: _
起始時(shí)間: 2010年3月4日
起止時(shí)間: 2010年6月 22 日
第一章 系統(tǒng)概述
1.1 設(shè)計(jì)背景
為了提高同學(xué)們的自學(xué)能力,老師決定給予一項(xiàng)我們沒有接觸過(guò)的課程設(shè)計(jì),也是我們很不熟悉,但是在IT界卻是很重要的一門技藝,我覺得老師的目的就是為了鍛煉我們的自學(xué)力
2、,而不是課程設(shè)計(jì)的能力,課程設(shè)計(jì)的能力是通過(guò)自學(xué)能力表現(xiàn)出來(lái)的。
1.2 設(shè)計(jì)目的
l 掌握unix操作系統(tǒng)常用API的調(diào)用;了解目錄操作、進(jìn)程控制等相關(guān)知識(shí)。
l 掌握創(chuàng)建子進(jìn)程和信號(hào);
l 初步學(xué)會(huì)使用管道進(jìn)行進(jìn)程間通訊;
l 掌握命令解釋程序的設(shè)計(jì)方法。
l 理解并發(fā)程序中的同步問(wèn)題。
l 培養(yǎng)C/C++語(yǔ)言程序設(shè)計(jì)技能,提高程序設(shè)計(jì)和文檔編寫能力。
l 鍛煉團(tuán)隊(duì)成員的交流與合作能力。
1.3 開發(fā)環(huán)境
操作系統(tǒng):Windows XP 2000 、UNIX系統(tǒng)
開發(fā)平臺(tái):Notepad++、 putty
編譯器版本:GNU GCC
開發(fā)語(yǔ)言:C語(yǔ)言
第二章
3、 總體要求與設(shè)計(jì)
2.1 設(shè)計(jì)要求:
Unix Shell是unix的命令解釋程序,用于讓用戶以一種友好的方式運(yùn)行程序和執(zhí)行命令。本設(shè)計(jì)要求在利用C或C++語(yǔ)言在linux環(huán)境下設(shè)計(jì)一個(gè)簡(jiǎn)單的命令解釋程序,實(shí)現(xiàn)shell的基本功能。即:用戶在命令行輸入命令(包括內(nèi)部命令和外部命令)及參數(shù),執(zhí)行該命令,以及實(shí)現(xiàn)輸入、輸出重定向等功能。
1)具體功能要求:
u 試驗(yàn)環(huán)境為unix,編程語(yǔ)言為C或C++;
u 整個(gè)程序必須經(jīng)過(guò)測(cè)試,完整實(shí)現(xiàn)所有基本功能;
u 程序的運(yùn)行必須穩(wěn)定可靠,不得出現(xiàn)執(zhí)行某命令時(shí),系統(tǒng)無(wú)響應(yīng)或退出現(xiàn)象;
u 程序編寫應(yīng)有良好的風(fēng)格,源程序必須有比較詳細(xì)的注釋
4、;
u 程序中不得使用system()系統(tǒng)調(diào)用;
2)其它要求
l 命令解釋程序的提示符為:@
l 命令解釋程序把命令解釋為內(nèi)部命令和外部命令(要執(zhí)行的程序)。內(nèi)部命令直接在命令解釋程序中執(zhí)行,外部命令則由解釋程序通過(guò)fork()創(chuàng)建一個(gè)子進(jìn)程,然后在子進(jìn)程中調(diào)用exec()執(zhí)行該程序;
2.2 程序流程圖:
圖2.1 程序流程圖
2.3 主程序:
int main(int argc, char *argv[])
{
int i;
init();
while (exit1 == 0)
{
int ch = 0;
5、 ch = GetCommand(Command, &NumberCommand);
switch (ch)
{
case 1:
dir1(NumberCommand, Command);
break;
case 2:
cd(NumberCommand, Command);
break;
case 3:
pwd(NumberCommand, Command);
break;
case 4:
md(NumberCommand, Command);
break;
case 5:
c
6、opy(NumberCommand, Command);
break;
case 6:
date(NumberCommand, Command);
break;
case 7:
Time(NumberCommand, Command);
break;
case 8:
ren(NumberCommand, Command);
break;
case 9:
del(NumberCommand, Command);
break;
case 10:
Exit1(NumberCommand,
7、 Command);
break;
case 11:
find(NumberCommand, Command);
break;
case 12:
more(NumberCommand, Command);
break;
deluat:
printf("It is not Command in this progame!\n");
break;
}
}
return 0;
}
第三章 主要模塊功能設(shè)計(jì)
由于此次課程設(shè)計(jì)是以小組的形式完成的,本人主要完成了time、date、pwd、md、re
8、n這五個(gè)模塊。
3.1 Time/Date模塊:
1、算法思想:先判斷是否符合命令模塊的基本格式;不符合的話,則退出time/date模塊。符合的話,則對(duì)時(shí)間相關(guān)信息進(jìn)行保存;最后根據(jù)需要打印出相關(guān)信息。
2、程序?qū)崿F(xiàn):
void date()
{
time_t timep;
struct tm *p;
char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
if (NumberCommand != 2)
{
p
9、rintf("usage: date directory_name\n");
return;
}
time(&timep);
p = gmtime(&timep);
printf("%d %d %d %s\n", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday, wday[p->tm_wday]);
}
void Time()
{
time_t timep;
struct tm *p;
char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday"
10、, "Thursday", "Friday", "Saturday"};
if (NumberCommand != 2)
{
printf("usage: time directory_name\n");
return;
}
time(&timep);
p = gmtime(&timep);
printf("%d %d %d %s %d:%d:%d\n", (1900 + p->tm_year), (1 + p->tm_mon),
p->tm_mday, wday[p->tm_wday], p->tm_hour + 8, p->tm_min,
11、p->tm_sec);
}
3.2 MD模塊:
1、算法思想:調(diào)用mkdir函數(shù)即可以實(shí)現(xiàn)創(chuàng)建一個(gè)目錄。
2、程序?qū)崿F(xiàn):
void md()
{
if (NumberCommand != 3)
{
printf("usage: md directory_name\n");
return;
}
if (mkdir(Command[1], S_IRUSR | S_IREAD) != 0)
{
printf("Create error\n");
}
}
3.3 PWD模塊:
1、算法思想:直接打印當(dāng)前目錄pathname;
12、
2、程序?qū)崿F(xiàn):
void pwd()
{
if (NumberCommand != 2)
{
printf("usage: pwd directory_name\n");
return;
}
else
{
printf("%s\n", pathname);
}
}
3.3 REN模塊:
1、算法思想:直接調(diào)用rename函數(shù);
2、程序?qū)崿F(xiàn):
void ren()
{
if (NumberCommand != 4)
{
printf("usage: ren directory_name\n");
ret
13、urn;
}
if (rename(Command[1], Command[2]) == 0)
{
;
}
else
{
printf("Rename error\n");
}
}
第四章 總結(jié)
幾周的課程設(shè)計(jì)終于可以結(jié)束了,在這幾周里,我們感觸頗深。我們學(xué)到了很多東西,也暴露出了許多缺點(diǎn)。在寫程序的時(shí)候我們感覺到要想寫好一個(gè)程序,首先要有一個(gè)清晰的思路,只有思路清晰才能進(jìn)行下一階段的設(shè)計(jì),這樣才能很好的完成整個(gè)程序。由于平時(shí)缺乏鍛煉,很少去寫這種代碼較多的程序,我們發(fā)現(xiàn)在宏觀的控制和把握上很缺乏經(jīng)驗(yàn)。也許主要的問(wèn)題還是自己能力的問(wèn)題,語(yǔ)音運(yùn)用能力差,掌握性差,希望能在以后的學(xué)習(xí)中多一些這樣的機(jī)會(huì),多多鍛煉。
五、 參考文獻(xiàn)
《UNIX環(huán)境高級(jí)編程》中文版 《現(xiàn)代操作系統(tǒng)原書(第2版)》
《自己動(dòng)手寫操作系統(tǒng)》 設(shè)計(jì)及實(shí)現(xiàn) (第三版)
- 6 -