湖北汽院王晓东操作系统实验指导

上传人:飞*** 文档编号:44850725 上传时间:2018-06-14 格式:DOC 页数:35 大小:243KB
返回 下载 相关 举报
湖北汽院王晓东操作系统实验指导_第1页
第1页 / 共35页
湖北汽院王晓东操作系统实验指导_第2页
第2页 / 共35页
湖北汽院王晓东操作系统实验指导_第3页
第3页 / 共35页
湖北汽院王晓东操作系统实验指导_第4页
第4页 / 共35页
湖北汽院王晓东操作系统实验指导_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《湖北汽院王晓东操作系统实验指导》由会员分享,可在线阅读,更多相关《湖北汽院王晓东操作系统实验指导(35页珍藏版)》请在金锄头文库上搜索。

1、实验一实验一 系统功能调用系统功能调用【实验目的实验目的】1熟悉操作系统的系统功能调用。 2掌握用C语言实现系统功能调用的方法和步骤。 3掌握利用10H号功能调用(BIOS的显示I/O功能调用)来实现对屏幕的操作与控制。【预习内容预习内容】1预习DOS、BIOS系统功能调用。 2预习C语言实现系统功能调用的方法。【实验内容实验内容】1在屏幕的指定区域内显示字符串。(必做题) 2在屏幕的指定区域内画框,在框内显示字符串。(提高题) 3. 在屏幕的指定区域内动画显示字符串。(附加题)【实验报告实验报告】1列出调试通过程序的清单,并加注释。 2给出必要的程序设计思路和方法(或列出流程图)。 3总结上

2、机调试过程中所遇到的问题和解决方法及感想。【实验相关资料实验相关资料】int86(0X10, ; struct BYTEGEGS unsigned int al,ah,bl,bh,cl,ch,dl,dh; union REGS struct WORDREGS x; struct BYTEGEGS h; 10H10H号中断调用下所包含的部分功能调用:号中断调用下所包含的部分功能调用:AH 功能调用00H 置显示方式01H 置光标类型02H 置光标位置06H 当前显示页上滚07H 当前显示页下滚09H 写字符和属性02H功能调用: 入口参数:AH=02HDH 光标的行位置(行数),0行是顶行,24

3、行是底行。DL 光标的列位置(列数),0列是最左边一列。BH 光标显示页数,40列方式,可用0到7,80列方式,可用0到3。 出口参数:无06H号功能调用: 入口参数:AH=06HAL 指明滚动的文本行数。如放置0,则整个窗口为空白。CH 指明窗口左上角的行位置(从0到24)。CL 指明窗口左上角的列位置(从0到79,80列)。DH 指明窗口右下角的行位置(从0到24)。 DL 指明窗口右下角的列位置(从0到79,80列)。 BH 指明加到窗口底部的空行显示属性。 对于彩色/图形适配器,属性字节如下所示:位 说 明 7 置“1”用于字符闪烁,置“0”字符不闪烁。 6-4 背景色。可用的是: 6

4、 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号功能调用: 入口参数:AH=09HBH 在文本方式中,此寄存器指明正在写的显示页。在40列方式中,可以用0到7页, 在80列方式中,可用0到3页。在图形方式中总是0。AL 放要写字符的ASCII码。BL 在文本方式中,为写字符的属性。CX 将字符和属性写到屏幕上的次数。 出口参数:一个字符或多个字符显示在屏幕上。

5、清屏子程序: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,/*系统功能调用*/定位子程序: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, 在指定位置写参数:void writech(int x , in

6、t 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=attr r.x.cx=1; int86(0x10, 屏幕画框可以用制表符来画。其主要方法是不断调用writech函数,在指定区域周围显示制表 符,从而勾勒出一个窗口的轮廓。 制表符 ASCII码 218 191 192 217 179 196内容一参考程序: #include #include #include #define SCR 0x10 void cls(void) union REGS r; r.h.ah=6;

7、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, 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(SCR, 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

8、, int main() int i,x=10,y=10;cls();for(i=0;i语句, C 同-E参数配合使用。让预处理后的结果,把注释保留,让人能够比较好读它。 连接开关(Linker Options) 用来控制连接过程的开关选项。 llibrary 连接库文件开关。例如-lugl,则是把程序同libugl.a文件进行连接。 lobjc 这个开关用在面向对象的C语言文件的库文件处理中。 nostartfiles 在连接的时候不把系统相关的启动代码连接进来。 nostdlib 在连接的时候不把系统相关的启动文件和系统相关的库连接进来。 static 在一些系统上支持动态连接,这个开关则

9、不允许动态连接。 shared 生成可共享的被其他程序连接的目标模块。 目录相关开关(Directory Options) 用于定义与目录操作相关的开关。 Ldir 搜寻库文件(*.a)的路径。 调试开关调试开关(Debugging(Debugging Options)Options) g g 把调试开关打开,让编译的目标文件有调试信息。 V version 用来告诉编译器使用它的多少版本的功能,version参数用来表示版本。 九、掌握九、掌握UbuntuUbuntu下下C C程序编辑运行过程(重点)程序编辑运行过程(重点)13UbuntuUbuntu下编写C程序要经过以下几个步骤:启动常用

10、的编辑器,键入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.c是源程序文件。【实验报告实验

11、报告】1举例列出常用的shell命令使用方法。 2通过实例总结上机调试C语言程序的过程及此次上机的感想。14实验三实验三 进程控制进程控制【实验目的实验目的】1、掌握进程的概念,明确进程和程序的区别。 2、认识和了解并发执行的实质。 3、分析进程争用资源的现象,学习解决进程互斥的方法。【实验内容实验内容】1、进程的创建(必做题)编写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符 ;父进程显示字符“a”,子进程分别显示字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。# includemain() int p1

12、, p2;while(p1=fork()= = -1);if(p1= =0)putchar(b);else while(p2=fork()= =-1);if(p2= =0)putchar(c);elseputchar( a); 2、 修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现 象,并分析其原因。(必做题)# include main() int p1, p2, i;while(p1=fork()= = -1);if(p1= =0)for(i=0;imain()printf(“pid=%dn”,getpid();3、 getppid 取得目前进程的父进

13、程识别码。 系统调用格式:int getppid() 例如:#includemain()printf(“My parents pid=%dn”,getppid();18实验四实验四 进程间通信进程间通信UNIX/LINUX系统的进程间通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是 了解和熟悉LINUX支持的信号量机制、管道机制、消息通信机制及共享存储区机制。(一)信号量机制实验(一)信号量机制实验【实验目的实验目的】1、了解什么是信号。 2、熟悉LINUX系统中进程之间软中断通信的基本原理。【实验内容实验内容】1、编写一段程序,使用系统调用fork( )创建两个子进程,再用

14、系统调用signal( )让父进 程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出以下信息后终止:Parent process is killed!#include #include #include #include #include int wait_mark; void waiting(),st

15、op(); void main() int p1, p2; signal(SIGINT,stop); while(p1=fork()=-1); if(p10)/*在父进程中*/ while(p2=fork()=-1);If(p20)/*在父进程中*/ wait_mark=1;waiting();kill(p1,10);kill(p2,12);wait(0);wait(0);19printf(“parent process is killed!n“);exit(0);else/*在子进程2中*/ wait_mark=1; signal(12,stop); waiting(); lockf(1,1,0); printf(“child process 2 is killed by pare

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号