计算机操作系统实训论文_第1页
计算机操作系统实训论文_第2页
计算机操作系统实训论文_第3页
计算机操作系统实训论文_第4页
计算机操作系统实训论文_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编号: 操作系统实训(论文)说明书题 目: 操作系统 院 (系): 专 业: 计算机科学与技术 学生姓名: 学 号: 指导教师: 陈金龙 2010年7月16日摘 要本次实训所完成的工作是基于PYOS基础上,对操作系统源代码进行个性化的修改,以及对学生管理系统的移植。在实现方法上,我们使用了C语言来编写系统GUI和系统业务逻辑,而对磁盘的操作,因为涉及到磁道和扇区的读写,我们使用的是X86汇编语言来实现相应的磁盘操作。基于PYOS上的学生管理系统已经实现了日常的学生业务处理功能,这些功能包括。系统包含了基础学生信息模块、学生编辑模块、背景管理模块、其他系统模块、帮助模块。每个模块的独立性都比较好

2、。模块的划分也比较清晰,为日后的软件维护工作节省了大量时间。在对系统的测试结果来看,系统基本达到了预期的目标,对一些错误数据的输入也能做出满意的容错处理。在操作系统层面,主要完成了一下几项工作:(1)完成了Windows环境下PYOS实验环境的搭建。(2)将学生管理系统绝大部分GUI移植到了PYOS中。(3)完成了对PYOS操作系统引导的初步探究。(4)对PYOS操作系统中键盘交互进行了优化和扩充。(5)将PYOS中的内存分布进行了重新划分。(6)完成了对磁盘内容分布的重新划分,包括将学生信息和扩充后的中文及英文字库加载到重新划分后的磁盘空间里。(7)对PYOS中鼠标的显示与刷新进行了优化。关

3、键词:操作系统; 管理系统; PYOS目 录1 准备工作11.1Windows环境下PYOS实验环境的搭建12 PYOS操作系统引导程序的探究63 学生管理系统中GUI绘图函数的移植73.1 PYOS中的所使用的VESA标准73.2 学生管理系统绘图函数的移植73.3 字库的修改94 磁盘内容的重新划分94.1 原始磁盘的分布情况94.2 改变原始磁盘分布105 系统内存安排115.1 系统内存安排概要115.2 修改字库加载到内存中的位置125.3 student.txt学生信息文件的加载与读取126 键盘响应137 鼠标响应158 消息响应169 学生管理系统179.1 界面移植179.2

4、 文件189.3 编辑189.5 其他1910 结束语21谢 辞22参考文献231 准备工作为了让学生管理系统能够更好的移植到PYOS上,我们首先对PYOS源代码进行了系统的分析和必要的修改。下面将从试验环境的搭建开始,一步步介绍如何对PYOS源代码进行必要的修改。1.1 Windows环境下PYOS实验环境的搭建Pyos 的所有源代码都是在Linux 环境下进行编译的,这主要是因为Linux 提供了很多非常实用的工具,而使用这些工具能使整个实验过程变得相对简单和容易。在本次实训中我们将远程登录到老师提供的Linux系统中编译PYOS源代码,我们需要安装“SSH Secure Shell Cl

5、ient”这个工具,安装好工具后,会出现如下两个小工具:SSH Secure File Transfer Client和SSH Secure Shell Client。SSH Secure File Transfer Client这个工具一般用于将编译好的img镜像拷贝出来,供VM虚拟机加载用,另外一个用途是修改相应的PYOS源代码,这个工具提供的是图形界面。而SSH Secure Shell Client则是一个命令行工具,主要用来编译相应的PYOS源代码,用于产生img镜像文件。当我们用SSH的命令行工具编译好PYOS后,我们将img文件copy到Windows下,然后我们用VMware

6、Workstation虚拟机来加载这个镜像,就可以运行我们编译好的PYOS了。下面我们详细描述以上的整个流程。首先我们打开SSH Secure File Transfer Client这个工具,点击Quick Connect按钮登录相应的远程Linux,如图1所示:图1:远程登录Linux登录这个工具后,我们将PYOS源代码从Windows中复制到远程的Linux系统中,之后我们打开SSH Secure Shell Client这个工具,依然先点击Quick Connect按钮登录相应的远程Linux,成功登录后我们可以看到以下画面,如图2所示:图2:SSH Secure Shell Clie

7、nt成功登录后的画面成功登录后,我们按如下图3所示的命令,进入相应的路径,然后编译源代码即可(注意讲compile.bat文件的权限设置为755)图3:成功编译后的画面编译完成之后,会在final 目录中得到一个pyos.img 文件,我们再通过前面的“文件传输窗口”把这个文件传回到Windows 目录下(如下图4所示):图4:最后得到的PYOS镜像文件把img文件复制到Windows后,我们用VMware Workstation新建一个虚拟机(注意VMware Workstation的版本不能太新,用5.5版本即可),在新建虚拟机的时候,要注意:在选择虚拟机类型的时候,类型都是other,如

8、下图5所示:图5:选择虚拟机的类型新建好虚拟机以后,我们在虚拟机的Floppy属性中将刚才编译的img文件加载进来,如图6所示:图6:选择镜像文件在选择镜像时,要注意一个问题,就是要把文件类型改为All files,如下图7所示:图7:修改文件类型修改好文件类型以后,我们就可以成功的看到相应的 img文件了。选择好镜像文件后,我们就可以开机运行了,效果如下图8所示:图8:虚拟机成功运行结果至此实验平台的搭建就说明完毕了。2 PYOS操作系统引导程序的探究要了解PYOS的引导程序,首先要知道计算机开机都做了什么。当机算机的电源键被按下时,同这个键相联的电信号线就会送出一个电信号给主板,主板将此电

9、信号传给供电系统,供电系统开始工作,为整个系统供电,并送出一个电信号给BIOS,通知BIOS 供电系统已经准备完毕。随后BIOS 启动一个程序,进行主机自检,主机自检的主要工作是确保系统的每一个部分都得到了电源支持,内存储器、主板上的其它芯片、键盘、鼠标、磁盘控制器及一些I/O 端口正常可用,此后,自检程序将控制权还给BIOS。接下来BIOS 读取BIOS 中的相关设置,得到引导驱动器的顺序,然后依次检查,直到找到可以用来引导的驱动器(或说可以用来引导的磁盘,包括软盘、硬盘、光盘等),然后调用这个驱动器上磁盘的引导扇区进行引导。BIOS 将磁盘的第一个扇区(磁盘最开始的512 字节)载入内存,

10、放在0x0000:0x7c00处,如果这个扇区的最后两个字节是“55 AA”,那么这就是一个引导扇区,这个磁盘也就是一块可引导盘。通常这个大小为512B 的程序就称为引导程序(boot)。如果最后两个字节不是“55 AA”,那么BIOS 就检查下一个磁盘驱动器。通过上面的表述我们可以总结出如下三点引导程序所具有的特点:1 它的大小是512B,不能多一字节也不能少一字节,因为BIOS 只读512B 到内存中去。2 它的结尾两字节必须是“55 AA”,这是引导扇区的标志。3 它总是放在磁盘的第一个扇区上(0 磁头,0 磁道,1 扇区),因为BIOS 只读第一个扇区。BIOS 一次只读一个扇区也即5

11、12 字节的数据到内存中,这显然是不够的,现在操作系统都比较庞大,因此我们必须在引导扇区里,将存在磁盘上的操作系统的核心部分读进内存,然后再跳转到操作系统的核心部分去执行。PYOS中的启动代码分成2个部分一是boot,另一个部分是setup。这两个文件基本都是对磁盘的一些读写,要读取磁盘扇区,我们需要使用BIOS 的13 号中断,13 号中断会将几个寄存器的值作为其参数,因此,我们在调用13 号中断的过程中需要首先设置寄存器。AH 寄存器:存放功能号,为2 的时候,表示使用读磁盘功能DL 寄存器:存驱动器号,表示欲读哪一个驱动器CH 寄存器:存磁头号,表示欲读哪一个磁头CL 寄存器:存扇区号,

12、表示欲读的起始扇区AL 寄存器:存计数值,表示欲读入的扇区数量在设置了这几个寄存器后,我们就可以使用 int 13 这条指令调用BIOS 13 号中断读取指定的磁盘扇区,它将磁盘扇区读到ES:BX 处,因此,在调用它之前,我们实际上还需要0x000000x003FF: 中断向量表0x004000x004FF: BIOS 数据区0x005000x07BFF: 自由内存区0x07C000x07DFF: 引导程序加载区0x07E000x9FFFF: 自由内存区0xA00000xBFFFF: 显示内存区0xC00000xFFFFF: BIOS 中断处理程序区设置ES 与BX 寄存器,以指出数据在内存中

13、存放的位置。3 学生管理系统中GUI绘图函数的移植3.1 PYOS中的所使用的VESA标准VESA标准包括了很多的子标准,其中对于操作系统编写最有用的就是VBE标准(VesaBios Extension) ,在实际的系统编写中,我们按照此标准,通过调用BIOS的0x10号中断,而对显卡进行操作,在调用此号中断的时候,ax寄存器中存放的就是你想使用的显卡的功能。 比如VESA 2.0标准规定: 0x4F00号功能可以返回显卡所支持的VESA标准的信息, 0x4F01号功能可以返回所指定的显示模式的信息,诸如行列像素是多少,每像素的字节数是多少之类。调用这些功能是非常方便的,比如,通过阅读VESA

14、标准,我们知道0x4F02号功能可以用来设置显示模式,调用此功能时,bx中存放的是欲设置的显示模式的编号,因此,如果我们想将显卡的显示模式设为0x111模式,那么我们应当编写如下的代码: mov ax , 0x4F02 ;设置中断功能号,表示使用0x4F02号功能 mov bx , 0x111 ;设置显示模式号,表示使用0x111显示模式 int 0x10 ;调用BIOS的0x10号中断,设置显卡功能执行了上面的代码之后,显卡就被设置成了0x111号显示模式。3.2 学生管理系统绘图函数的移植学生管理系统的所有GUI函数的移植,都是基于PYOS提供的图形驱动的,其实这个图形驱动就是一系列的基本

15、绘图函数,如果要对PYOS的图形驱动追本溯源的话,那么我们得详细的分析void vesa_draw_point这个函数,因为这个函数是整个Pyos VESA显卡驱动的根基,所有画线、画矩形、填充矩形都是由它完成的,现在我们就来分析一下,注意下面的一行代码: / 取得显存线性地址 unsigned short *video = ( unsigned short * )( * ( ( unsigned int *)0x90001 ) ) ; 首先,我们从PYOS的参考文档中得知0x9000:0001处存放了显卡显存的线性地址(这个线性地址是32位,即4B) ,因此,把0x9000:0001转换为线

16、性地址就是0x90001,然后,我们在C语言中把它转强行转换成一个指向unsigned int型的指针,然后通过 * 操作符,取出了这个指针,即地址为0x90001处所存的数据,也就是取得了存放于此处的显存的线性地址,然后把它强性转换为一个unsigned short型的指针,这是因为,每个点都是用2B字节,也就是都是用一个unsigned short类型的数据表示的,这个线性地址也是(0,0)点的地址。随后,我们通过列坐标:x,行坐标:y,算得了(x,y)点的偏移量,最后直接把色彩信息赋值给这个(x,y)点所在的内存地址,那么(x,y)点处就显现出了我们所指定的色彩。实际上就这么简单!在学生

17、管理系统中的DrowBox函数,其实就是PYOS里的vesa_fill_rect函数,而在整个GUI函数的移植过程中,show_info(unsigned int x,unsigned int y,char *str,unsigned short color)这个函数可以说是最关键的。该函数的功能如下:Show_info(unsigned int x,/文本起始x坐标 unsigned int y,/文本起始y坐标 char *str,/要在屏幕上输出的文本 unsigned short color/文本的颜色 )完成了这个函数的编写以后,我们就可以随心所欲的在屏幕上输出想要的文字了。以下是该

18、函数的实现流程,如图9所示:图9:Show_info函数的实现流程3.3 字库的修改要说明清楚Show_info函数的具体实现,我们首先要了解我们对字库进行了哪些修改。如下所示,是修改后的make_font.cpp的核心内容:string english = "abcdefghijklmnopqrstuvwxyz0123456789" ; for( int i = 0 ; i < english.length() ; +i )如果是数字,则pos_in_font = stri-'0'+26;,这是因为数字的ASCII减去0就是对应数字的值,比如数字5减

19、去0,那么就等于5,然后5再加上26就刚好是english字符串中,数字5的位置。同理如果是字母则:Pos_in_font = stri-'a'4 磁盘内容的重新划分4.1 原始磁盘的分布情况我们可以通过查看compile.bat这个文件,来了解PYOS的原始磁盘分布情况,如下所示:out/make_together.exe final/pyos.img 36864 resource/login_1.bmp # 起始( 0.2 )out/make_together.exe final/pyos.img 101376 resource/login_2.bmp # 起始 1.5 (

20、 1 磁头 5 磁道 )out/make_together.exe final/pyos.img 165888 resource/normal_cursor.bmp # 起始 0.9 ( 0 磁头 9 磁道 ) out/make_together.exe final/pyos.img 169984 resource/down_cursor.bmpout/make_together.exe final/pyos.img 174080 resource/hold_down_cursor.bmpout/make_together.exe final/pyos.img 178176 resource/

21、empty.bmp out/make_together.exe final/pyos.img 182272 resource/full.bmpout/make_together.exe final/pyos.img 186368 resource/wall.bmpout/make_together.exe final/pyos.img 190464 resource/my_ball.bmpout/make_together.exe final/pyos.img 194560 resource/people.bmpout/make_together.exe final/pyos.img 2027

22、52 resource/ch.font # 中文字库( 0.11.1 )out/make_together.exe final/pyos.img 203264 resource/en.fong # 英文字库( 0.11.2 )out/make_together.exe final/pyos.img 211968 resource/bomb.bmp # 应用程序图标( 1.11 )out/make_together.exe final/pyos.img 248832 resource/logout.bmp # 应用程序图标( 1.13 )out/make_together.exe final/p

23、yos.img 304128 resource/top.bmp # 应用程序图标( 1.16 )由于在本次实训中,我们的系统不需要login_2.bmp和相应的应用程序图标,所以我们可以把login_2.bmp和应用程序图标用到的磁盘空间用作其他用途。4.2 改变原始磁盘分布改变原始磁盘分布的原因有2个,第一个原因:我们对字库进行了扩充,原始分配的空间无法完全存放扩充后的字库。第二个原因:学生管理系统需要保存相关的学生数据,这些数据保存在一个叫student.txt的文件中,而这个文件需要保存到磁盘中。我们改变磁盘空间分布的方案是:student.txt占用login_2.bmp所用的磁盘空间

24、,英文字库占用原来中文和英文总共的空间,而中文字库则占用原来应用程序图标的空间。具体的修改如下所示:out/make_together.exe final/pyos.img 36864 resource/login_1.bmp # 起始( 0.2 )#out/make_together.exe final/pyos.img 101376 resource/login_2.bmp # 起始 1.5 ( 1 磁头 5 磁道 )out/make_together.exe final/pyos.img 101376 resource/student_file.txtout/make_together.

25、exe final/pyos.img 165888 resource/normal_cursor.bmp # 起始 0.9 ( 0 磁头 9 磁道 ) out/make_together.exe final/pyos.img 169984 resource/down_cursor.bmpout/make_together.exe final/pyos.img 174080 resource/hold_down_cursor.bmpout/make_together.exe final/pyos.img 178176 resource/empty.bmp out/make_together.ex

26、e final/pyos.img 182272 resource/full.bmpout/make_together.exe final/pyos.img 186368 resource/wall.bmpout/make_together.exe final/pyos.img 190464 resource/my_ball.bmpout/make_together.exe final/pyos.img 194560 resource/people.bmp#out/make_together.exe final/pyos.img 202752 resource/ch.font # 中文字库( 0

27、.11.1 )#out/make_together.exe final/pyos.img 203264 resource/en.fong # 英文字库( 0.11.2 )out/make_together.exe final/pyos.img 202752 resource/en.fong #out/make_together.exe final/pyos.img 211968 resource/bomb.bmp # 应用程序图标( 1.11 )out/make_together.exe final/pyos.img 211968 resource/ch.font out/make_toget

28、her.exe final/pyos.img 248832 resource/logout.bmp # 应用程序图标( 1.13 )out/make_together.exe final/pyos.img 304128 resource/top.bmp # 应用程序图标( 1.16 )5 系统内存安排5.1 系统内存安排概要在 CPU 被加电的时候,最初的 1M 的内存,是由 BIOS 为我们安排好了的,每一字节都有特殊的用处。如下图10所示:图10:BIOS安排好的内存由于 0x000000x003FF 是中断向量表所在,因此不能将磁盘中的操作系统读到此处,因为这样会覆盖中断向量表,就无法再

29、通过 BIOS 中断读取磁盘内容了。你也许会说:我是先调用中断,再读的啊。但事实上BIOS 在读的过程中自己会多次调用其它中断辅助完成。5.2 修改字库加载到内存中的位置由上一节我们知道,中文字库和英文字库在磁盘中的位置都相应的改变了。我们通过查看setup.asm文件,可以看到两个字库新的内存位置,如下所示,分别是将应用程序图标、中文字库加载到相应的内存中。;- read_application_bmp ;下面继续读入第1 面的第11 磁道,共扇区,(login.bmp ),存入0x7000:0000 处 mov ax , 0x7000 mov di , 4 ;欲读入的磁道总数(1.11 ,

30、 0.12 , 1.12 , 0.13) mov dh , 1 mov ch , 11 call read_disk_length_less_64K ret;-;- read_font_lib: push es mov di , 2 ;读的总扇区数( 0.11.1 , 0.11.2 ) mov ax , 0x3000;- 由于我们将扩展后的中文字库占用了应用程序图标的磁盘空间,用扩展后的英文字库占用了原来中文和英文字库的空间,所以,新的中文字库就被加载到以0x7000为起始地址的内存空间上,而扩展后的英文字库,则被加载到了以0x3000为起始地址的内存空间上。我们获得新的内存地址以后,下一步就

31、是修改图形驱动里的和字体显示相关的函数,他们分别是:vesa_print_chinese和vesa_print_english两个函数,修改的方法很简单,就是修改相应指针的地址就可以了,如下所示是修改以后的语句:unsigned char *chinese_font_addr = ( unsigned char * )0x70000 + pos_in_font * 32 ; / 一个汉字 32 字节unsigned char *english_font_addr = ( unsigned char * )0x30000 + pos_in_font * 16 ; / 一个英文 16 字节5.3

32、student.txt学生信息文件的加载与读取由于student.txt占用的磁盘空间是login_2.bmp的,所以studen.txt被加载到以0x6000开头的内存地址空间上。我们只写这样一行代码,就可以把学生信息的首地址读取出来了;struct student* str=(unsigned char*)0x60000;6 键盘响应PYOS是采用的消息驱动,简单来说,就是系统完成初始化工作之后就进入一个消息循环,然后不停的在探险测消息循环中是否有消息在存,如果有消息则取出。消息是一个结构体,它有一个成员被用着标志消息类别,另外一些成员被用着消息的参数,消息类别用来告诉消息的接受者这是一个

33、什么消息,消息的参数用来向消息的接收者传递数据。当应用程序取得消息后,则可以根据消息的类别进行一些处理。消息队列的结构体struct message_message_queue_struct int head ; int tail ; struct message_message_struct message_buffer 8 ; ;一个操作系统必需要具有交互性。所谓交互性就是指人与计算机之间的一种交流,有两种最基本的交互设备,一是显示器,一是键盘。显示器是计算机用来与人进行交流的,计算机通过显示器来告诉人一些信息,而键盘是人用来与计算机进行交流的,人通过键盘将命令发送给计算机,计算机接受人通

34、过键盘发来的命令,然后进行处理,最后将处理的结果通过显示器告诉人,这样就完成了一次最简单最基本的交互。Keyboard.c中,包括了键盘初始化、键盘中断和键盘中断处理函数。我们只用知道键盘调用21号中断后,使用unsigned char ch = io_read_from_io_port( 0x60 )从键盘获得当前输入,在中断处理中对ch进行判断,如原来的PYOS中:case 0x1 : ch = '&' ; / 本来是 ESC 键,这里用 R 表示 break ; case 0x17 : ch = 'i' ; break ; case 0x24 :

35、ch = 'j' ; break ; case 0x25 : ch = 'k' ; break ;而学生管理系统中,我们要输入的字符包括26个字母和10个数字,还要使用上下左右、回车等键盘符进行操作。例如:case 0x02: ch='1' break;case 0x03: ch='2' break;case 0x04: ch='3' break;最后,还要将ch作为消息发送: struct message_message_struct message ; message.message_type = MESSAG

36、E_KEYBOARD_MESSAGE ; message.key = ch ; message_put_message( &kernel_message_queue , message ) ;发送消息后,主机从消息队列中捕获消息,对消息进行响应,然后调用中断,判断其中的ch的值,然后做相应的处理。7 鼠标响应首先研究PYOS是如何实现鼠标控制的:当鼠标的初始化完成之后,如果有鼠标动作发生,比如用户移动了一下鼠标,或者按下了鼠标键,那么鼠标将把数据包发回给主机。这个数据包被主机捕获,调用鼠标中断:void mouse_handle_for_mouse_interrupt()static

37、int x_position = 444 ; / 定义 鼠标 的初始 x 坐标static int y_position = 300 ; / 定义 鼠标 的初始 y 坐标static int count = 0 ; / 此变量用来记录这是第几个数据包了/ 因为 鼠标 发来的每个数据包/ 都会引起一个中断后面代码略PYOS中,鼠标移动的判断是根据原来保存的位置与当前消息中鼠标的位置相比较,若有不同,则判定鼠标移动,进行鼠标的重绘。重绘先将原鼠标所在位置的背景图恢复(此时无鼠标),然后将当前消息的位置保存,并用它来画新的鼠标。if( kernel_mouse_x_position != messa

38、ge.x_position | kernel_mouse_y_position != message.y_position ) mouse_move_mouse( kernel_mouse_x_position , kernel_mouse_y_position , message.x_position , message.y_position , kernel_mouse_type ) ; kernel_mouse_x_position = message.x_position ; kernel_mouse_y_position = message.y_position ; 若发送的鼠标消息

39、是左键消息,会将message中的变量dose_left_button_down置1,主机截获后只需判断该变量即可。若要判断鼠标是否进入了某个区域,通过使用当前鼠标的坐标与选择区域进行对比。8 消息响应实际上,鼠标发送的消息和键盘发送的消息是同一种结构体,主机捕获消息后,根据其中的message.message_type判断是哪种消息,如MESSAGE_KEYBOARD_MESSAGE 是键盘消息;MESSAGE_MOUSE_MESSAGE是鼠标消息;而MESSAGE_SHUTDOWN_COMPUTER是关闭消息。主机进入一个for( ; )循环响应消息,直到相应功能跳出循环为止。循环中: i

40、f( !message_get_message( &kernel_message_queue , &message ) ) continue ; 当消息队列kernel_message_queue中有消息时,将消息存入message中,若无消息,则执行continue结束循环。 if( message.message_type = MESSAGE_SHUTDOWN_COMPUTER ) break ; 当捕获消息为关机消息时,跳出循环,跳出主循环,关闭操作系统。switch( message.message_type )case MESSAGE_KEYBOARD_MESSAGE

41、 :处理代码略case MESSAGE_MOUSE_MESSAGE :处理代码略9 学生管理系统学生管理系统功能的移植,是本次实训的重点,在懂得操作系统如何运转之后,我们需要通过实现学生管理系统的实践来巩固知识。9.1 界面移植首先移植学生管理系统的界面,通过调用PYOS中VESA.C文件提供的API,并增加了大量的绘图函数,扩充了英文与中文的字库,最终完成的界面如图11:图11:系统界面图9.2 文件文件功能包括添加学生和查找学生。添加学生是新输入一个学生的信息,将信息保存进系统,如图12图12 添加学生信息查找学生通过输入学生学号,搜索到相应的学生信息,如图13,搜索到学生后显示学生信息,

42、如图13:图13 查找学生9.3 编辑编辑功能包括删除学生与修改学生。删除学生通过输入学生学号,若找到相应学生,则将该学生数据删除,如图14。图14 删除学生修改学生通过学号进行搜索,调出相应学生的信息,并允许修改并保存。9.4 背景管理系统允许用户将界面设置成不同的颜色,如灰色或绿色。改变背景后,一切操作的背景都将变为新的主题色,如图15:图15 更改主题色后9.5 其他其他 包括显示所有学生与关于。显示所有学生,是通过表格的方式将所有的学生信息显示,如图16所示:图16 显示所有学生“关于”显示帮助信息,如图17。图17 关于10 结束语本次实训完成了学生管理系统的移植和操作系统的底层知识的学习,主要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论