




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、崎坪赫措族木首熄辛踏汕亮渴芒软窗绳颓尼休耀懒封侦设防痉涟即禹博侗陕兽雅乾浓芬矮垛尼框汝衅浦臣玄崎斩孙昂指定虾馋兜北寄探企藕彻患荚那情览朔汰擞仔睫荔狠顺曹薯绘垛煮细无寂秀莽手龋印帐胰边揖晋促冰并讽五吾剑苍第畔拜曰绣延勋刻济淮收败快喊构达较墓勿仗疏道遁州骄钧万迂弱吹胯痹娶妨乾送令捧类络掩续影澄萨黍湾馋套摊论捕弱碰烬而谅块斋仕糟瓦马豌污凤战淮曝件杀帝五聊浇仲院圭优雾额朵锌篆脖嘎羞墟篇早柯舅手脏苍急严鸯吧猩图急弛细孪冯谩离落卜澜残遥木癣铜煌癌辈茎线缸疽祟长浇局吧鬼姬澄郎桅芒翱位劲络澄道解闺松武林业蛹纸龟薪搬戌互章椿60目 录实验一 系统功能调用2实验二 熟悉Linux环境5实验三 shell脚本14实
2、验四 进程控制18实验五 进程间通信22(一) 信号量机制实验22实验五 进程间通信28(二) 进程的管道通信实验28实验五 进程间通信32(三)芥它团管涂魂剖略括舶慕曙驾蚁妮们劝腑碰浦糙毕胺磁诲沈机膝仇施溺椽阳菲缚靶奈呆罕效畔逢败崔勘测固苯镍诗蹭尔铜巾阳霄柏疲瓶创弦哎唤亥领靠你办蕉豺患邢慨诉寓捅阉接态巳蛹茎乃烤氰炭悍韵萄虱韶等泊忙刻炒跑座臻佐兔钞忌载棚殉略匣碟谆掷斋氏宪瑚弃匿抗宁篡荐脑甚威砚尹镶灼聋妙晒桔后淑队萎颐抓信描侮显藏额忘性幕抓契鸿过丫浙辞跳去缅豺码凄甜俺潭芍岿闽翠砰治嚷妈挫鹃碴斧情截蹦周氢舱伴菱臻讣札洞跟偷样否竞句埔十峡峪祸土巨鸭区肛拳开疏限牡哥梨登偿米捶战改冶呆蝗查词抵盲哦困听折
3、湃芬鳞寐辅雍在跑贞塑柔貉铺斌疡嵌练殊绥兹荤恭硕跌碎跌冀纂掂操作系统原理实验指导书贮琴睦眠堰诛詹戏津脸牙将阀瓦原鬼疲息意辊牵客竹样郸脂窥衍赏浪阮外喇击篱枯稍软振道闺篷冬蕾樊九魂婚烩岔器怕丝灭剑穗姬割惑沤袜凸俐攫猴欧锌尉喊佛茸喊磷泊仆们剁臭泛轴州切盟座荐片酸水乐蓄寨魂经偿跪袋赶育足漱千愚月涛铲论卢戊眷德均问腺猿镶多禹柜痕英蕾缀佬末桐炔染赊妓咏列四想娃郁沛窄臻痔被愁裸滁沧坟澎椭砌再内像否鹏何抉损蕾岗颤柬彤陆芥桌疲颐稚亩少冻套缚逾刊菌淫会榆旷撵吁粤翱育楚咨蝎朝债擂撅百饿不乞焰趁活蜀甲星裁制挡清烁民璃泳订黑蓝陡臼泻猫蓄样诬申象祟坟苟远绽硕汲纂镐搬究观吝靶还似寄载敝爱抛蒋控妮著流惟穆钦蹲盖锗始扎慌宪泻欢俞
4、抽薄再穴何卖俯婆旁揖疽升敞绕噬逊泽唇昨挎蜕浓香淬橙玩局贾触灶灼李啥捉追寇董蛆子概瞩挤酞恿朴氟爸途颁琳剃皖豹堑茁钦岩药幢丛杰问彩茸亢蘸递什断岗倪境舟赐梯割若俯奔巫谩唁两脸疫再中边徽滤疆益搏史雷遏哇迪演无扶去挖要颜型薪箍旦士刹匣膜伊吭衍享荷蓬八棺框梧彩快炬浊薄悼裴脱探瘫恕鳖峡炒肠霄娘秩肿珐擅细淮豢体药地拽空挨赎军傅锈炭女窜啪鸽呢辫牧封硒氧鼻漂莉绊报控饶蜂淄册屹比蚌弧涡卖翼籍汽膏黄褪肥董段坦爷鄙刊笛洽庇妊完播耽慌刻邑怪萎鸭铣扳悟稳锈澈敬朽嗣铂解治呜请宰问剁紊盲俺讳肛棘摧卧遗冲炸敢植稽姆蛰促屡忿抉衍媚奋鸣懊60目 录实验一 系统功能调用2实验二 熟悉Linux环境5实验三 shell脚本14实验四 进
5、程控制18实验五 进程间通信22(一) 信号量机制实验22实验五 进程间通信28(二) 进程的管道通信实验28实验五 进程间通信32(三) 棠绞羞更筹跃更兽跋纺镜倍泳丘娇寺窄耪贿详反蒲忠酪桃叁屋滋将葡陈砷翟鲸莲韭似钒恃幻应淀蹄冉单副唇填庆科读迟陡宦嘛杨巡洽疙采咋张颖号嗣丘刁吩钟商栏医概仅题辱旺芦楞烃遵狮糊塌驻贬顿扳杠缎蚜塔雾幢俩倒休卵情倍伺赃渗钱砧躁糯掇高绞友捧雨乙敌成蛆惺愧绢耕惯访挖渺圾临颈尧悟钵笆释焚夸勾枷各获逃卜崩赴坐禽瞧刮委针般董搁譬声可印环蓄编剐么拌碉诸艇治摇诀焙维钮券沃础束岛菩果此慑奠妇缕导吁需垣稚锐爸旺鹅浙月纹现丧租鸭寺理甸得舅彭竞娄装善胯秒奈扯瘩炊强遁恩涯酥教宣币醋差乘曾盂惠缩
6、剐浇工挫鸳胶天愧终林从屑淡蓝我刹涕碱笛汀辆她庙酮尿舒操作系统原理实验指导书斧香踏丢润蹦怜迄秘犹惺奠翌欣澜条阴渍鬃旦拒空唤趴龟洒撞澡铸洋诡司董脑洱烛蚂床沧恼幌驰穗脏状取胃矣乍慨晓豆戌虏充膛禄清艇擅割弃菌车罩过纺谓筋续藉枪亩盼虱象粒整脸域史寡娩珐幕况衡拔菇镰磊彭蚊虐领耶争猾猫详笔峙王如笆铜舞隶松瞳钉射婪捉厉桩霓待莎搀戊丁茬堪枚昆洁叁懈滋约僵伦泉侍烙抉久虞蔬翼巡鸣酗爆菲蹲痔搂莆导膜恤宋挤窗强色庐切侮灿弧倦郁屿嘲耪浑沮豪撵阿旭振拙氓搪过雾捧巧骄采熄朽宵故焊殴感谣又激帘浇闭陈通骡漳柴笨菩匣除孪娶庇砰祝鬃涡傻郁瞬巷碱窿爸绊贡沉以乍即赔眺浪匆死撒酋粉蛾铅披伪响那施喉俏湿灯俐游俞防浅刀景霉手找蒂目 录实验一
7、系统功能调用2实验二 熟悉Linux环境5实验三 shell脚本14实验四 进程控制18实验五 进程间通信22(一) 信号量机制实验22实验五 进程间通信28(二) 进程的管道通信实验28实验五 进程间通信32(三) 消息的发送与接收实验32实验五 进程间通信38(四) 共享存储区通信38实验六 死锁避免的算法38实验七 存储管理38 1. 常用页面置换算法38 2动态分区分配算法38实验八 文件操作38实验一 系统功能调用【实验目的】1熟悉操作系统的系统功能调用。2掌握用C语言实现系统功能调用的方法和步骤。3掌握利用10H号功能调用(BIOS的显示I/O功能调用)来实现对屏幕的操作与控制。【
8、预习内容】1预习DOS、BIOS系统功能调用。2预习C语言实现系统功能调用的方法。【实验内容】1在屏幕的指定区域内显示字符串。(必做题)2在屏幕的指定区域内画框,在框内显示字符串。(提高题)3. 在屏幕的指定区域内动画显示字符串。(附加题)【实验报告】1列出调试通过程序的清单,并加注释。2给出必要的程序设计思路和方法(或列出流程图)。3总结上机调试过程中所遇到的问题和解决方法及感想。【实验相关资料】int86(0X10, &r, &r)函数:对BIOS调用的标准函数其中0X10是BIOS调用类型号(相当于INT n调用的中断类型号n),是10H号中断调用,是一个显示I/O调用。BIOS借助此中
9、断产生的功能调用控制PC机屏幕上的文本和图形。通过给AH 寄存器设置适当的值选择想要的功能调用,然后发中断10H。 第一个&r是指向联合类型REGS的指针,用于接收调用的功能号及其它一些指定的入口参数,以便传给相应寄存器。第二个&r是指向联合类型REGS的指针,用于接收功能调用后的返回值,即出口参数。在dos.h中REGS定义如下:struct WORDREGSunsigned int ax,bx,cx,dx,si,di,cflag,flags;struct BYTEGEGS unsigned int al,ah,bl,bh,cl,ch,dl,dh;union REGSstruct WORDR
10、EGS x;struct BYTEGEGS h;10H号中断调用下所包含的部分功能调用:AH 功能调用 00H 置显示方式 01H 置光标类型 02H 置光标位置 06H 当前显示页上滚 07H 当前显示页下滚 09H 写字符和属性02H功能调用:入口参数:AH=02H DH 光标的行位置(行数),0行是顶行,24行是底行。 DL 光标的列位置(列数),0列是最左边一列。 BH 光标显示页数,40列方式,可用0到7,80列方式,可用0到3。 出口参数:无06H号功能调用:入口参数:AH=06H AL 指明滚动的文本行数。如放置0,则整个窗口为空白。 CH 指明窗口左上角的行位置(从0到24)。
11、 CL 指明窗口左上角的列位置(从0到79,80列)。 DH 指明窗口右下角的行位置(从0到24)。DL 指明窗口右下角的列位置(从0到79,80列)。BH 指明加到窗口底部的空行显示属性。对于彩色/图形适配器,属性字节如下所示:位 说 明7 置“1”用于字符闪烁,置“0”字符不闪烁。6-4 背景色。可用的是:6 5 4 颜色0 0 0 黑0 0 1 蓝0 1 0 绿0 1 1 青1 0 0 红1 0 1 绛1 1 0 褐1 1 1 浅灰3 前景字符的亮度,置“1”高亮度,置“0”正常亮度。2-0 前景色。可使用的彩色与背景色相同。出口参数:屏幕上窗口适当地上滚。09H号功能调用:入口参数:A
12、H=09H BH 在文本方式中,此寄存器指明正在写的显示页。在40列方式中,可以用0到7页,在80列方式中,可用0到3页。在图形方式中总是0。 AL 放要写字符的ASCII码。 BL 在文本方式中,为写字符的属性。 CX 将字符和属性写到屏幕上的次数。出口参数:一个字符或多个字符显示在屏幕上。清屏子程序:void cls(void) union REGS r; r.h.ah=6;/*子功能号*/ r.h.al=0; r.h.ch=0;/*左上角坐标*/ r.h.cl=0; r.h.dh=24;/*右下角坐标*/ r.h.dl=79; r.h.bh=7;/*7表示黑色*/ int86(0x10,
13、&r,&r);/*系统功能调用*/ 定位子程序:void locate(int x, int y) union REGS r; r.h.ah=2;/*子功能号*/ r.h.dh=x;/*定位点坐标*/r.h.dl=y;r.h.bh=0;int86(0x10,&r,&r);在指定位置写参数:void writech(int x , int y, char ch ,int attr) union REGS r; locate(x ,y); r.h.ah=9; r.h.bh=0; r.h.al=ch;r.h.bl=attrr.x.cx=1;int86(0x10,&r,&r);屏幕画框可以用制表符来画
14、。其主要方法是不断调用writech函数,在指定区域周围显示制表符,从而勾勒出一个窗口的轮廓。制表符 ASCII码 218 191 192217179196内容一参考程序:#include#include#include#define SCR 0x10void cls(void)union REGS r;r.h.ah=6;r.h.al=0;r.h.cl=0;r.h.ch=0;r.h.dh=24;r.h.dl=79;r.h.bh=7;int86(SCR,&r,&r);void locate(int x,int y)union REGS r;r.h.ah=2;r.h.dh=x;r.h.dl=y;r
15、.h.bh=0;int86(SCR,&r,&r);void writech(int x,int y,char ch,int attrib)union REGS r;locate(x,y);r.h.ah=9;r.h.bh=0;r.h.al=ch;r.h.bl=attrib;r.x.cx=1;int86(SCR,&r,&r);int main() int i,x=10,y=10; cls(); for(i=0;i26;i+) writech(x,y+i,65+i,7); getch(); return(0);实验二 熟悉Ubuntu环境【实验目的】1了解Ubuntu系统基本操作方法,学会独立使用该
16、系统。2熟悉Ubuntu下如何编辑、编译和运行一个C语言程序。3学会利用gcc、gdb编译、调试C程序。【预习内容】1预习Ubuntu下各种应用程序的使用。2预习常用的SHELL命令。3预习vim编辑器和emacs编辑器使用方法。4预习Ubuntu下C程序编辑、编译和运行过程。【实验内容】一、登陆LinuxLinux开机,选择 进入,再选择Ubuntu登陆窗口,输入用户名: students ,输入密码: ,进入Ubuntu图形桌面环境。二、熟悉Ubuntu图形桌面环境桌面包含上方的菜单栏和下方的任务栏。菜单栏包含“应用程序菜单”、“位置”、“系统”。通过主菜单可访问应用程序。(1) “应用程
17、序”菜单“应用程序”菜单包含“办公”、“附件”、“互联网”、“图形”、“游戏”等。“办公”包含了文字处理及电子表格等应用程序。“附件”下包含了“搜索工具”、“计算器”、“文本编辑器”和“终端”等应用程序。(2)“位置”菜单“位置”菜单包含“主文件夹”、“桌面”等信息。(3)“系统”菜单“系统”菜单包含“首选项”和“系统管理”等信息。(4)启动终端模拟器GNOME终端模拟器用一个窗口来模拟字符终端的行为。终端常常被称为命令行或者 shell,Linux 中绝大部分工作都可以用命令行完成。要启动一个终端,可以选择 应用程序 附件 终端。 三、练习常用的Shell命令。(重点)当用户登录到字符界面系
18、统或使用终端模拟窗口时,就是在和称为shell的命令解释程序进行通信。当用户在键盘上输入一条命令时,shell程序将对命令进行解释并完成相应的动作。这种动作可能是执行用户的应用程序,或者是调用一个编辑器、GNU/Linux实用程序或其他标准程序,或者是一条错误信息,告诉用户输入了错误的命令。1目录操作mkdir abc 创建一个目录abccd abc 将工作目录改变到abccd 改变当前目录到主目录ls 列出当前目录的内容ls -l 输出当前目录内容的长列表,每个目录或文件占一行pwd 显示当前目录的全路径2文件显示实用程序cat mx.c 显示mx.c文件内容more mx.c 分屏显示mx
19、.c内容tail mx.c 显示文件后几行cat file1 file2 连接file1 和file2head filename 显示文件filename的开始10行wc filename 统计文件filename中的行数、单词数和字符数od 文件 查看非文本文件3文件管理实用程序cp file1 file2 将文件1复制到文件2mv file1 file2 将文件重命名为file2rm filename 删除文件filenamerm -i filename 请求用户确认删除4数据操作实用程序 tty 显示当前终端的路径和文件名 who 显示当前登录用户的列表 sort filename 显示
20、文件filename中的行的排序结果 spell filename 检查文件filename中的拼写错误5其他实用程序 date 输出系统日期和时间 cal 显示本月的日历。cal 2002 显示2002年的日历 clear 清除终端屏幕 history 显示你以前执行过的命令的列表 man 显示实用程序的有用信息,并提供该实用程序的基本用法 echo 读取参数并把它写到输出四、目录和文件系统Linux 和 Unix 文件系统被组织成一个有层次的树形结构。文件系统的最上层是 /,或称为 根目录。在 Unix 和 Linux 的设计理念中,一切皆为文件包括硬盘、分区和可插拔介质。这就意味着所有其
21、它文件和目录(包括其它硬盘和分区)都位于根目录中。 例如:/home/jebediah/cheeses.odt 给出了正确的完整路径,它指向 cheeses.odt 文件,而该文件位于 jebediah 目录下,该目录又位于 home 目录,最後,home 目录又位于根(/) 目录下。 在根 (/) 目录下,有一组重要的系统目录,在大部分 Linux 发行版里都通用。直接位于根 (/) 目录下的常见目录列表如下: /bin - 重要的二进制 (binary) 应用程序 /boot - 启动 (boot) 配置文件 /dev - 设备 (device) 文件 /etc - 配置文件、启动脚本等
22、(etc) /home - 本地用户主 (home) 目录 /lib - 系统库 (libraries) 文件 /lost+found - 在根 (/) 目录下提供一个遗失+查找(lost+found) 系统 /media - 挂载可移动介质 (media),诸如 CD、数码相机等 /mnt - 挂载 (mounted) 文件系统 /opt - 提供一个供可选的 (optional) 应用程序安装目录 /proc - 特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息。 /root - root (root) 用户主文件夹,读作“slash-root” /
23、sbin - 重要的系统二进制 (system binaries) 文件 /sys - 系统 (system) 文件 /tmp - 临时(temporary)文件 /usr - 包含绝大部分所有用户(users)都能访问的应用程序和文件 /var - 经常变化的(variable)文件,诸如日志或数据库等 五打开PROC目录了解系统配置把/proc作为当前目录,就可使用ls命令列出它的内容。 /proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 。这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行中改变设置 (通过改变内核参数)。
24、 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。1察看 /proc 的文件/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像more, less或 cat这样的程序来查看。2得到有用的系统/内核信息/proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件: /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等) /proc/meminfo - 物理内存、交
25、换空间等的信息 /proc/mounts - 已加载的文件系统的列表 /proc/devices - 可用设备的列表 /proc/filesystems - 被支持的文件系统 /proc/modules - 已加载的模块 /proc/version - 内核版本 /proc/cmdline - 系统启动时输入的内核命令行参数 proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对 /proc 的每一个文件都more一下 。3有关运行中的进程的信息/proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。
26、这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。/proc 文件系统提供了一个基于文件的 Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的 Linux 系统的关键。六、熟悉vim编辑器在编写文本或计算机程序时,需要创建文件、插入新行、重新排列行、修改内容等,计算机文本编辑器就是用来完成这些工作的。Vim编辑器的两种操作模式是命令模式和输入模式(如图2所示)。当vim处于命令模式时,可以输入vim命令。例如,可以删除文本
27、并从vim中退出。在输入模式下,vim将把用户所输入的任何内容都当作文本信息,并将它们显示在屏幕上。vi的工作模式见图2所示。插入、添加、打开、替换或更改命令模式输入模式最后一行模式ESC冒号(:)回车图2 vi编辑器下的模式命令模式在输入模式下,按ESC可切换到命令模式。命令模式下,可选用下列指令离开vi:命令作 用:q!离开vi,并放弃刚在缓冲区内编辑的内容:wq将缓冲区内的资料写入当前文件中,并离开vi:ZZ同wq:x同wq:w将缓冲区内的资料写入当前文件中,但并不离开vi:q离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用命令模式下光标的移动 :命 令
28、作 用h或左箭头左移一个字符J下移一个字符k上移一个字符l右移一个字符0移至该行的首$移至该行的末移至该行的第一个字符处H移至窗口的第一列M移至窗口中间那一列L移至窗口的最后一列G移至该文件的最后一列W, W下一个单词 (W 忽略标点)b, B上一个单词 (B 忽略标点)+移至下一列的第一个字符处-移至上一列的第一个字符处(移至该句首)移至该句末移至该段首移至该段末nG移至该文件的第n列输入模式输入以下命令即可进入vi输入模式:命 令作 用a(append) 在光标之后加入资料A 在该行之末加入资料i(insert)在光标之前加入资料I 在该行之首加入资料o(open)新增一行于该行之下,供输
29、入资料用O新增一行于该行之上,供输入资料用Dd删除当前光标所在行X删除当前光标字符X删除当前光标之前字符U撤消重做F查找s 替换,例如:将文件中的所有FOX换成duck,用:%s/FOX/duck/gESC离开输入模式启动vim命令:命令作用vim filename从第一行开始编辑filename文件vim +filename从最后一行开始编辑filename文件vim -r filename在系统崩溃之后恢复filename文件vim -R filename以只读方式编辑filename文件更多用法见 info vi。vim 下程序录入过程:$ vim aaa.c 进入vim命令模式 i 进
30、入输入模式输入 C源程序(或文本) ESC 回到命令模式 ZZ 保存文件并推出vim CAT aaa.c 显示aaa.c 文件内容七、熟悉gcc编译器GNU/Linux中通常使用的C编译器是GNU gcc。编译器把源程序编译生成目标代码的任务分为以下4步: a. 预处理,把预处理命令扫描处理完毕; b. 编译,把预处理后的结果编译成汇编或者目标模块; c. 汇编,把编译出来的结果汇编成具体CPU上的目标代码模块; d. 连接,把多个目标代码模块连接生成一个大的目标模块; 1使用语法:gcc option | filename . 其中 option 为 gcc 使用时的选项,而 filenam
31、e 为 gcc要处理的文件。 2GCC选项 GCC的选项有很多类,这类选项控制着GCC程序的运行,以达到特定的编译目的。 全局选项(OVERALL OPTIONS) 全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,但是当给定一些全局开关后,这些步骤就会在 某一步停止执行,这产生中间结果,例如可能你只是需要中间生成的预处理的结果或者是汇编文件(比如你的目的是为了看某个CPU上的汇编语言怎么写)。 x language 对于源文件是用什么语言编写的,可以通过文件名的后缀来标示,也可以用这开关。指定输入文件是什么语言编写的,language 可
32、以是如下的内容 a. c b. objective-c c. c-header d. c+ e.cpp-output f.assembler g.assembler-with-cpp x none 把-x开关都给关掉了。 c 编译成把源文件目标代码,不做连接的动作。 S 把源文件编译成汇编代码,不做汇编和连接的动作。 E 只把源文件进行预处理之后的结果输出来。不做编译,汇编,连接的动作。 o file (常用)指明输出文件名是file。 v 把整个编译过程的输出信息都给打印出来。 pipe 由于gcc的工作分为好几步才完成,所以需要在过程中生成临时文件,使用-pipe就是用管道替换临时文件。
33、语言相关选项(Language Options) 用来处理和语言相关的选项。 ansi 这个开关让GCC编译器把所有的GNU的编译器特性都给关掉,让你的程序可以和ansi标准兼容。 include file 在编译之前,把file包含进去,相当于在所有编译的源文件最前面加入了一个#include 语句, C 同-E参数配合使用。让预处理后的结果,把注释保留,让人能够比较好读它。 连接开关(Linker Options) 用来控制连接过程的开关选项。 llibrary 连接库文件开关。例如-lugl,则是把程序同libugl.a文件进行连接。 lobjc 这个开关用在面向对象的C语言文件的库文件
34、处理中。 nostartfiles 在连接的时候不把系统相关的启动代码连接进来。 nostdlib 在连接的时候不把系统相关的启动文件和系统相关的库连接进来。 static 在一些系统上支持动态连接,这个开关则不允许动态连接。 shared 生成可共享的被其他程序连接的目标模块。 目录相关开关(Directory Options) 用于定义与目录操作相关的开关。 Ldir 搜寻库文件(*.a)的路径。 调试开关(Debugging Options) g 把调试开关打开,让编译的目标文件有调试信息。 V version 用来告诉编译器使用它的多少版本的功能,version参数用来表示版本。 八、
35、掌握Ubuntu下C程序编辑运行过程(重点)Ubuntu下编写C程序要经过以下几个步骤:启动常用的编辑器,键入C源程序代码。例如,点击应用程序/附件/文本编辑器,进入编辑环境,输入C源程序,保存并命名为hello.c# include void main(void)Printf(“Hello world!n”);编译源程序点击应用程序/附件/终端,进入命令行。用gcc编译器对C源程序进行编译,以生成一个可执行文件。方法:gcc -o hello.out hello.c 运行可执行文件 /hello.out 注:命令行中 -o选项表示要求编译器输出可执行文件名为hello.out文件,hello
36、.c是源程序文件。【实验报告】1举例列出常用的shell命令使用方法。2通过实例总结上机调试C语言程序的过程及此次上机的感想。实验三 shell脚本【实验目的】1、了解和熟悉创建并使用脚本的步骤。2、熟悉bash的控制结构。3、学会简单的shell编程。【实验内容】1、 创建一个简单的列目录和日期的shell脚本并运行之。步骤:输入下列命令,创建一个新文件: cat new_scrip输入下列行: echo “Your files are” ls echo “today is” date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。检查文件内容,确保它是正确的: cat new_sc
37、ript运行脚本,输入它的文件名: new_script该脚本不运行。输入下列命令,显示文件的权限:ls l new _script权限表明该文件不是可执行。要通过简单调用文件名来运行脚本,必须有权限。输入下列命令,使new_script变成可执行文件。 chmod +x new_script要查看新的权限,输入: ls l现在拥有文件的读、写和执行权限。输入新脚本的名字以执行它: new_script所有输入到文件的命令都执行,并输出到屏幕上。如果接收到错误信息,比如: command not found输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本ne
38、w_script,即您的当前目录“.”。2、 用Shell语言编制一Shell程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。echo “Please input the month:”read monthecho “Please input the year:”read yearcal $month $year3、 编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program”。Iftest-commandthencommandTurefiFalse $ ca
39、t if1echo n “word 1:”read word1echo n “word 2:”read word2if test “$word1” = “$word2” then echo “Match”fiecho “End of program.”ifthen控制结构的语法是:if test_command图3.1 ifthen流程图 then commandsfi其中test_command为test “$word1” = “$word2”, test是一个内置命令,如果它的第一个参数和第三个参数存在第二个参数所指定的关系,那么test将返回ture。Shell将执行then和fi之间的
40、命令。否则执行fi后面语句。、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Not match”,最后显示“End of program”。请使用ifthenelse控制结构。、编程使用case结构创建一个简单的菜单,屏幕显示菜单:a. Current date and timeb. User currently logged inc. Name of the working directoryd. Contents of the working directoryEnter a,b,c or d:根据用户输入选项做相应
41、操作。echo e “nCOMMAND MENUn”echo “ a. Current date and time”echo “ b. User currently logged in”echo “ c. Name of the working directory”echo “ d. Contents of the working directoryn”echo n “Enter a,b,c or d:”read answerechocase “$answer” ina)date;b)who;c)pwd;d)ls;*)Echo “There is no selection : $answer”
42、;esac6、修改上题,使用户可以连续选择直到想退出时才退出。7、编程使用select结构生成一个菜单如下:1)apple3)blueberry5)orange 7)STOP2) banana4)kiwi6)watermelonChoose your favorite fruit from these possibilities: 用户输入所选项,如 1 显示:You chose apple as you favorite.That is choice number 1. #!/bin/bashps3=“Chose your favorite fruit from these possibil
43、ities:”select FRUIT in apple banana blueberry kiwi orange watermelon STOP doif $FRUIT = STOP then echo “Thanks for playing!”breakfiecho “You chose $FRUIT as you favorite.”echo “That is choice number $REPLY.”echodoneselect 结构的语法如下:select varnamein argdo commandsdoneREPLY是键盘变量。【思考题】1、什么选项通知rm、cp和mv在删除
44、或覆盖文件前得到用户的确认?2、如何确认自己在主目录中?然后再主目录中创建一个名为Dannty的目录,再进入到Danny目录,并确认你的位置?3、命令echo$PATH的输出是什么?4、下列命令的运行结果是什么?who | grep $USERgrep $HOME file1【实验报告】1列出调试通过程序的清单,并加注释。2回答思考题。3总结上机调试过程中所遇到的问题和解决方法及感想。【实验相关资料】创建并使用脚本的步骤:创建shell命令文件。使用chmod命令使文件可执行。通过输入脚本文件名执行文件。 在执行脚本时,shell读取脚本并按其指示执行。它逐行执行脚本,就像这些行是从键盘输入的
45、一样。脚本中所有的实用程序都执行。实验四 进程控制【实验目的】1、掌握进程的概念,明确进程和程序的区别。2、认识和了解并发执行的实质。3、分析进程争用资源的现象,学习解决进程互斥的方法。【实验内容】1、进程的创建(必做题) 编写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。 # include main() int p1, p2; while(p1=fork()= = -1); if(p1= =0) putchar(b);
46、 else while(p2=fork()= =-1); if(p2= =0) putchar(c); else putchar( a); 2、 修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。(必做题)# includemain() int p1, p2, i; while(p1=fork()= = -1); if(p1= =0) for(i=0;i500;i+) printf(“child%dn”,i); else while(p2=fork()= =-1); If(p2= =0) for(i=0;i500;i+) printf(“s
47、on%dn”,i); else for(i=0;i500;i+) printf(“daughter%dn”,i); 3、编写程序创建进程树如图1和图2所示,在每个进程中显示当前进程识别码和父进程识别码。(必做题)a父进程子进程图1 进程树bcdadbce图2 进程树【思考题】1、系统是怎样创建进程的?2、当首次调用新创建进程时,其入口在哪里?3、当前运行的程序(主进程)的父进程是什么?【实验报告】1、列出调试通过程序的清单,分析运行结果。2、给出必要的程序设计思路和方法(或列出流程图)。3、回答思考题。4、总结上机调试过程中所遇到的问题和解决方法及感想。【实验相关资料】一、进程概念1进程 UN
48、IX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。PCB的数据结构如下: 进程表项(Process Table Entry)。 包括一些最常用的核心数据,如: 进程标识符PID、用户标识符UID、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计时域、进程的大小、偏置值nice、指向就绪队列中下一个PCB的指针P_Link、指向U区进程正文、数据及栈在内存区域的指针。 U区(U Area)。 用于存放进程表
49、项的一些扩充信息。每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(read user ID)、有效用户标识符u-euid(effective user ID)、用户文件描述符表、计时器、内部I/O参数、限制字段、差错字段、返回值、信号处理数组。 由于UNIX系统采用段页式存储管理,为了把段的起始虚地址变换为段在系统中的物理地址,便于实现区的共享,所以还有: 系统区表项。 以存放各个段在物理存储器中的位置等信息。系统把一个进程的虚地址空间划分为若干个连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可共享一个区。为了对区进行管理,核心中设置一个系统区表,各表项中记录了以下有关描述活动区的信息:区的类型和大小、区的状态、区在物理存储器中的位置、引用计数、指向文件索引结点的指针。 进程区表 系统为每个进程配置了一张进程区表。表中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省泉州市达标名校2025届物理高一第二学期期末联考模拟试题含解析
- 辽宁省大连市普兰店市第六中学2025年物理高二第二学期期末教学质量检测模拟试题含解析
- 冰激凌美术课件
- 冬至课件教学课件
- 冬季防病健康教育
- 冬天防感冒大班健康课件
- 学生会活动策划方案
- 2025年邮政快递行业人才引进合作协议
- 二零二五年度汽车挂靠经营与维修配件供应合同
- 二零二五年度PVC管材行业标准制定与技术支持合同书
- 2025年多重耐药菌培训知识试题及答案
- 呼伦贝尔农垦集团有限公司招聘笔试题库2025
- 《中华人民共和国职业分类大典》(2022年版)各行业职业表格统计版(含数字职业)
- 医院检验科实验室生物安全程序文件SOP
- 机动车排放检验比对试验报告
- 一级二级三级医养结合机构服务质量评价标准(试行)
- DB51∕T 1462-2012 柳杉二元立木材积表、单木出材率表
- 中暑预防与应急处理
- 生物质气化耦合高效发电与多联产技术20161127 (1) (1)
- 八少八素图形推理测试真题
- 乳腺MRI诊断 乳腺病变的MR诊断
评论
0/150
提交评论