实 验 报 告
( 2012/ 20## 学年 第二学期)
实 验 报 告
实 验 报 告
实 验 报 告
实 验 报 告
实 验 报 告
实验一 Linux系统熟悉与使用
Linux有两种不同的含义。从严格的技术定义讲,Linux指的是开放源代码的Unix类操作系统的内核。然而,目前大多数人用它来表示以Linux内核为基础的整个操作系统。从这种意义讲,Linux指的是开放源代码的,包含内核、系统工具、完整的开发环境和应用的Unix类操作系统。
它是一个支持多用户, 多进程,实时性好的功能强大而稳定的操作系统。它可以运行在x86 PC,Sun Sparc,Digital Alpha,680x0,PowerPC, MIPS等平台上,可以说Linux是目前运行硬件平台最多的操作系统.,但是它主要还是面向Intel PC硬件平台。 所以也可以这样的说:Linux是Unix在Pc机上的完整实现。
一、 进入系统和注销系统
1.1 远程登录
【指令】telnet,rlogin
【格式】
telnet hostname(远程主机名)
telnet ip-address(远程主机的IP地址)
rlogin hostname [-1 username]
【示例】
% telnet hostname
% telnet 192.9.200.11
% rlogin hostnam 远程登录到主机 hostname上
% rlogin hostname -l user 使用user帐号进入主机hostname(可利用指令arp hostname 或 arp domain_name 查询远程主机的IP地址)
【附注】
登录步骤
login : _______ 输入用户名
password : _______ 输入用户密码
1.2 更改帐号密码
【指令】passwd
【格式】passwd [user]
【示例】修改root口令
# passwd 执行后将显示以下信息:
New UNIX password: ______ 输入新密码
Retype new password: ______ 再输入一次新密码
1.3 注销系统
【指令】logout,exit和 <CTRL><D>
【示例】
% logout
% exit
% <CTRL><D>
二、 目录、文件常用指令
2.1 列出目录内容
【指令】ls
【格式】ls [-atFlgR] [name] (name可为文件名或目录名)
【示例】
% ls 列出当前目录下的文件名
% ls -a 列出包含以.起始的隐藏文件所有文件名
% ls -t 依照文件修改的时间顺序,依序列出文件名
% ls -F 列出当前目录下的文件名及其类型。"/" 结尾表示为目录名称,"*" 结尾表示为执行文件,"@" 结尾表示为 symblic link
% ls -l 列出目录下所有文件之许可权、拥有者、文件大小、修改时间及名称
% ls -lg 同上,并显示出文件的拥有者群组名称
% ls -R 显示出目录下、及其所有子目录的文件名
【附注】
可使用通配符'*'和'?'来代替文件名或部分名称。 '*'可以代替一个字符串,'?'只能代替一个字符。
2.2 显示当前的工作目录
【指令】pwd
【示例】
% pwd
2.3 阅读文件内容
阅读文件内容
【指令】cat,more
【格式】
cat filename
more filename
cat filename | more
【示例】
% cat file1 以连续显示方式查看文件file1的内容
% more file1 以分页方式查看文件名 file1 的内容
% cat file1 | more 同上
2.4 改变工作目录
【指令】cd
【格式】cd [name] (name可为目录名、路径或目录缩写)
【示例】
% cd 改变目录位置,至用户 login 时的起始目录
% cd dir1 改变目录位置,至目录 dir1下
% cd ~user 改变目录位置,至用户的起始目录
% cd .. 改变目录位置,至当前目录的上层
% cd ../user 改变目录位置,至相对路径 user的目录位置下
% cd /../.. 改变目录位置,至绝对路径的目录位置下
【附注】目录的缩写含义
~ 用户 login 时的起始目录
~ username 指定某位 user 的起始目录 . 当前的工作目录 .. 当前目录的上一层目录
2.5 拷贝文件
【指令】cp
【格式】cp [-firP] source destination
【示例】
% cp file1 file2 将文件file1 复制成 file2
% cp file1 dir1 将文件file1 复制到目录 dir1 下的 file1 文件
% cp /tmp/file1 . 将目录 /tmp 下的文件file1 复制到当前目录下
% cp /tmp/file1 file2 将/tmp 下的文件file1 复制成当前目录下的 file2
% cp -r dir1 dir2 将目录dir1整个复制给目录dir2
【附注】其它选项
-r 如果拷贝源是一个目录,则该目录下的子目录与文件都会被复制
-f 在有可能覆盖原有文件时不发出警告(默认)
-i 复制过程会覆盖原有文件时,提示要求用户确认
-P 副本文件会保留源文件的属性、权限和最新被存取/修改的时间
2.6 链接文件
【指令】ln
【格式】ln oldname newname
【示例】
% ln file1 file2 将名称 file2,连结至文件 file1
% ln -s file3 file4 将名称file4连结至文件file3
【附注】-s选项表示要建立符号链接
2.7 移动文件/文件重新命名
【指令】mv
【格式】mv [-fi] source destination
【示例】
% mv file1 file2 将文件file1,更名为 file2
% mv file1 dir1 将文件file1移到目录dir1下,文件名不变
% mv dir1 dir2 将目录 dir1整个移到目录 dir2 下
【附注】其它选项
-f 在有可能覆盖原有文件时不发出警告(默认)
-i 在有可能覆盖原有文件时发出警告,要求用户确认
2.8 建立新目录
【指令】mkdir
【格式】mkdir directory-name
【示例】
% mkdir dir1 建立一新目录 dir1。
2.9 删除目录或文件
【指令】rmdir,rm
【格式】
rmdir directory-name
rm [-fir] filename|directory-name
【示例】
% rmdir dir1 删除目录dir1(dir1必须为空目录)
% rm -r dir1 删除目录 dir1及其下所有文件及子目录
% rm file1 删除文件file1
% rm file? 删除文件名为五个字符且前四个字符为file 的所有文件
% rm f* 删除文件名以 f打头的所有文件
【附注】其它选项
-r 用于删除目录
-i 删除文件时显示详细的提示
-f 删除文件时不作任何提示
三、 常用系统命令
3.1 联机使用手册查询
【指令】man
【格式】man [-t] [-M path] [-K keyword] command-name
【示例】 % man ls
【附注】其它选项
-t 用troff编排手册内容
-M path 如果联机帮助不在/usr/man目录下,则必须指定路径path
-K keyword 用于查找相关指令
3.2 显示和设定系统时间
【指令】date
【格式】date [ mmddhhmm [ yy ] ] [ +format ]
【示例】
% date 显示当前的日期与时间
% date 10080045 系统时间被定为Oct8,12:45AM
% date +DATE: %m/%d/%N; date +TIME: %H:%M:%S 屏幕显示如下信息: DATE: 08/06/99 TIME: 14:45:05
3.3 查看系统中的用户
【指令】who,finger
【格式】who finger [username]
3.4 用户切换
【指令】su
【格式】su username
【示例】
% su user 进入用户 user 的帐号
passwrod: 输入用户 user 的密码
3.5 查看用户名
【指令】whoami
【格式】
who am i (查看登录时,自己的用户名)
whoami (查看当前用户名,若已执行过 "su"命令则显示此用户的用户名)
3.6 查看登录到当前系统的所有网络用户
【指令】rusers
【格式】
rusers
<CTRL><C>(结束)
3.7 显示文件或目录占用的磁盘空间
【指令】du
【格式】du [-s] [-a] directory
【示例】
% du dir1 显示dir1目录及其子目录的容量(以 K byte 为单位)
【附注】其它选项
-s 只显示设定文件的容量
-a 可一一显示多个文件的磁盘量
3.8 查询文件系统可用空间
【指令】df
【格式】df [-i] [-t type] [filesystem]
【示例】
% df 显示当前所有文件系统的使用情况: Filesystem kbytes userd avail capacity Mounted on /dev/ipOa 7445 4714 1986 70% / /dev/ipOg 42277 35291 2758 93% /usr ...
【附注】其它选项
-k 文件空间以K-bytes为单位
-i 显示可使用的inode的统计数目
-t 仅打印所指定文件系统的统计数目
3.9 设定文件读写权限
【指令】chmod
【格式】chmod [-R] mode name
【示例】
% chmod 755 dir1 将目录dir1设为任何人都可读取、执行,但只有拥有者可修改
% chmod 700 file1 将文件file1设为只有拥有者可以读、写和执行
% chmod o+x file2 为文件file2的拥有者增加可执行的权限
% chmod g+x file3 为文件file3的所属群组用户增加可执行权限
% chmod o-r file4 除去其它用户对文件file4的可读取权限
【附注】 name 可为文件名或目录名 mode 可为 3 个 8 位元之数字,或利用ls -l 命令,列出文件或目录的读、写、执行允许权限的文字缩写 mode : rwx rwx rwx r:read w:write x:execute user group other 缩写:(u) (g) (o)
3.10 设定文件或目录的所有权
【指令】chown
【格式】chown [-R] username name
【示例】
% chown user file1 将文件 file1改为user用户所有
% chown -R user dir1 将目录dir1及下属所有文件和子目录改为user用户所有
3.11 检查自己所属群组的名称
【指令】groups
【格式】groups [user]
【示例】 % groups
3.12 设定文件的组属关系
【指令】chgrp
【格式】chgrp [-R] groupname name
【示例】
% chgrp group1 file1 将文件file1的群组拥有权改为 gourp1 群组
% chgrp -R group1 dir1 将目录dir1及其下所有文件和子目录,改为group1群组
3.13 文件中字符串查寻
【指令】grep
【格式】grep "string-name" file
【示例】 % grep "abc" file1 查找文件file1中字串 abc 所在行的内容
3.14 查寻文件或命令的路径
【指令】whereis,which,whatis,find
【格式】
whereis command (显示给出命令的路径)
which command (显示给出命令的路径及用户定义的别名)
find search-path -name filename -print (从给定路径下查找文件,并显示路径 )
【示例】
% whereis date 显示指令date的路径
% find / -name file1 -print 从根目录下开始查找文件file1
3.15 比较文件或目录的内容
【指令】diff
【格式】diff [-r] name1 name2 (name1 name2可为文件名或目录名)
【示例】
% diff file1 file2 比较文件file1与file2内各行的不同处
% diff -r dir1 dir2 比较目录 dir1 与 dir2 下各文件的不同处
3.16 更新文件或目录的最后修改时间
【指令】touch
【格式】touch name (name可为文件或目录名称)
【示例】 % touch filname
3.17 检查网络是否正常
【指令】ping
【格式】ping hostname 或 ping IP-Address
【示例】 % ping hostname (hostname为远程主机名)
3.18 文件传输
【指令】rcp
【格式】
rcp [-r] source hostname:destination (source为文件名、目录名或路径,hostname为主机名,destination为路径)
rcp [-r] hostname:source destinatio ( hostname为主机名,source 为路径,destination为文件名、目录名或路径 )
【示例】
% rcp file1 hostname:/home/user 将文件file1拷贝到主机hostname的/home/user目录下
% rcp -r dir1 hostname:/home/user 将目录 dir1拷贝到主机hostname的/home/user目录下
% rcp hostname:/home/user/file1 file2 将主机 hostname的/home/user/file1文件拷贝到当前主 机的当前路径下,文件名改为file2
% rcp -r hostname:/home/user/dir1 . 将主机hostname的目录/home/user/dir1拷贝到当前主机的当前目录下,目录名不变
3.19 文件传输协议
【指令】ftp
【格式】ftp hostname or ftp ip_address
【示例】
% ftp hostname 与远程主机 hostname进行文件传输 Name (hostname:user-name) : 输入帐号 Password (hostname:user-name): 输入密码
ftp> hel 列出 ftp 文件传输可使用的所有命令
ftp> !ls 列出本地主机当前目录下的所有文件
ftp> !pwd 列出本地主机当前路径
ftp> ls 列出远程主机当前目录下的所有文件名
ftp> pwd 列出远程主机当前路径
ftp> cd dir1 将远程主机的工作目录位置改至 dir1目录之下
ftp> get file1 将远程主机当前目录的文件 file1拷贝到本地主机当前目录中 ftp> put file2 将本地主机当前目录的文件 file2拷贝到远程主机当前目录中 ftp> mget *.c 将远程主机当前目录所有的*.c文件拷贝到本地主机当前目录中 ftp> mput *.txt 将本地主机当前目录所有的*.txt 文件拷贝到远程主机当前目录中
ftp> prompt 切换交谈式指令 ftp> quit 结束 ftp 工作 ftp> bye 同上
3.20 与其它系统的用户对话
【指令】talk
【格式】
talk username@hostname
talk username@Ip_address
【示例】
1. 可先利用 rusers 指令查看网上的现有用户
2. 假设主机 indian 上的用户 u84987要与 hostname 上的用户 u84123 对话:
% talk u84123@hostname 此时屏幕上将会出现等待画面 在对方(u84123)屏幕上将会出现下列讯息 Message from Talk_Daemon@Local_host_name at xx:xx talk: connection requested by u84987@indian talk: respond with: talk84987@indian 此时对方(u84123) 必须执行 talk u84987@indian 即可互相对话
3.最后可按结束
四、 文件编辑器 vi 的使用方法简介
【介绍】 在系统提示符下运行vi命令,此时屏幕会出现 vi编辑屏幕,同时在缓冲区中复制文件。 Vi 编辑的是缓冲区中的副本文件,当编辑完成后,用户有权决定是否要取代原有文件。
vi 的操作模式有两种,输入模式和指令模式。
【进入vi】
% vi [filename] 直接编辑文件
% vi file1 file2 . . . 同时编辑多个文件
% vi -r filename 恢复编辑时被中断的文件
【离开vi】
按ESC键进入指令模式后,选用下列指令离开vi编辑窗:
:q! 不存盘,立即退出vi编辑窗
:wq 存盘,退出vi编辑窗
:ZZ 同wq
:x 同wq
:w 存盘,但并不退出vi
:q 退出vi编辑窗,若文件被修改过,则会自动提示是否存盘
【进入输入模式】
a 把内容附加在光标之后
A 把内容附加在行末
i 把内容附加在光标之前
I 把内容附加在行首
o 在光标所在行之下新增一行
O 在光标所在行之上新增一行
【退出输入模式】 按ESC键退出输入模式
【光标的移动指令】
指令如下:
h 向左移一个字符
j 向下移一行
k 向上移一行
l 向右移一个字符
0 移至该行之首
$ 移至该行之末
^ 移至行头
H 移至屏幕最上端
M 移至屏幕的中间
L 移至屏幕底端
G 移至文件未
+ 移至下一行首
- 移至上一行首
( 移至上一句首
) 移至下一句首
{ 移至上一段首
} 移至下一段首
nG 移至文件的第 n 行
【屏幕移动指令】
<Ctrl><f>屏幕下翻一页
<Ctrl><b>屏幕上翻一页
<Ctrl><d>屏幕下翻半页
<Ctrl><u>屏幕上翻半页
【删除指令】
dO 删除到光标所在行首
dw 删除到光标所在单词结尾
d3w 删除到第三个单词末
dW 删除到下一空格处
db 删除到上一空格处
dd 删除当前行
ndd 删除从当前行开始n行(向后删除)
dL 删除到屏幕上的最后一行
dH 删除到屏幕上的第一行
dG 从光标所在处删除至文件尾
x 删除光标所在该字符
X 删除光标所在的前一字符
【修改指令】
cc 修改当前行
cw 修改到字末
【搜索指令】
/字串 从光标所在处向后查找字符串
字串 从光标所在处向前查找字符串
n 向下继续查找
N 向上继续查找
【移动、复制和撤消指令】
y 将文本复制到缓冲区
nyy 把n行文本复制到缓冲区内
p 把删除或复制的缓冲区内容放置在光标的下方
r 把光标所在字符替换成另一字符
u 取消上一个执行命令
U 取消对本行所有的修改
J 将两行合并
【环境的设定】
:set nu 显示行数
:set nonu 不显示行数
:set ic 查找时不考虑大小写因素
:set noic 查找时考虑大小写因素
【执行指令】
:e filename 编辑另一个文件
:r filename 从光标所在处载入另一文件
:n 将光标移到第n行
:s 字符串替换(例如:起始行号,终止行号s/被替换串/替换串/g)
:w 写入文件
:q 退出vi
:q! 强制退出vi(修改部分会遗失)
:x 写入文件并退出vi
:wq 同上
:wq! 强制写入文件并退出vi
五、 linux常见问题
5.1 安装linux的分区问题:
在硬盘的剩余空间中装载linux分区,最好删除dos分区的最后一个分区,对于linux操作系统,一个交换分区(swap)和一个根分区是必须的。
5.2 安装和卸载LILO:
安装:首先遇到LILO(LInux LOader)启动管理程序,估计应该在你安装Linux的时候,你会被要求选择LILO 的安装处,是硬盘主引导记录MBR还是Linux 的根分区。如果你有其他的启动管理程序例如Boot Magic 或者 System Commander 等,并且想使用他们,那么你应该把LILO安装到Linux的根分区。如果你选择使用LILO作为启动管理程序,就可以选择MBR。如果你想在启动时传递参数给内核,也应该使用MBR。计算机启动时,BIOS会执行位于硬盘主引导记录(MBR)。
卸载:在dos下:用DOS启动,执行FDISK /MBR就可以重写主引导记录,覆盖LILO。在linux下:执行命令lilo –u。
5.3 如何在LINUX下看dos分区的文件
确定核心支持VFAT文件系统,然后改/etc/fstab中的选项,例如:mount –t vfat /dev/hda1 /dos这样就可以看dos文件名了。
5.4 复制子目录及子目录下的所有文件
在用cp时加上-r参数,如"cp -r /mnt/floppy/* /usr/local/"要参考的重要参数是-f –s。
5.5 文件/目录改名
简单地用move命令移到新名字下即可。例如"mv /usr/oldname /usr/newname"。
5.6 怎样删除一个目录下的所有文件和子目录及子目录下的所有文件
rm -rf /tmp/example
5.7 查找命令文件的路径
比如你要查找mount命令的具体路径,可以用type mount 、whereis mount,这个命令还可以找出与这个命令文件相关的文件如manuals page。
5.8 查找文件
使用find命令,比如: find /usr -name XF86* 在/usr目录下(包含子目录)查找名字前四个字母为XF86的文件
find . -name netscape –print 在当前目录下(包含子目录)查找名为netscape的文件
find /home –nouser 在/home目录下查找没有用户属主的文件(用户帐号被删除但有遗留文件)
find /var -newer test 在/var目录下查找比test文件日期更新的文件
更快速的查找文件是使用locate,第一次使用locate之前用updatedb来更新文件/目录名数据库。它把文件/目录信息写到数据库中,以后查找起来就特别的快。updatedb放在crontab中而且缺省配置是在半夜自动执行。locate存在轻微的安全性问题,因为普通用户可以用它来取得自己不能访问的目录/文件的部分信息。
5.9 快速调出历史命令
可以用上下光标键来调出历史命令,然后用左右光标键移动并可编辑命令行。
5.10 命令补齐(TAB键的妙用)
很多shell都有这个功能:
1. 只需输入文件或目录名的前几个字符, 然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现;如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字.例如cd /mnt/cd 自动补齐为 cd /mnt/cdrom。
2. 在命令行下,只需输入例如"m",再连续按两次TAB键,系统将列出所有以"m"开头的命令,(包括自定义的Bshell命令函数),对查找某些记不清楚的命令特有用.例如输入"ftp",将查到ftp, ftpcount, ftpwho, ftpshut等本不熟悉的命令。
5.11 怎样使linux启动进入时不直接进入X-WINDOWS界面?
改/etc/inittab文件,将有“id:5:initdefault:”这一行中的,把数字5改成3 即可
5.12 在Linux下如何使用软盘、光盘以及DOS等非Linux分区
因为Linux下没有A盘D盘的概念。你需要把软盘/光盘设备上的文件系统安装到Linux目录树上的一个点上,称之为安装点(mount point),通常是一个目录。安装Linux后会有个缺省的安装点/mnt,在它下面还有/mnt/floppy和/mnt/cdrom。你可以用mount -t ext2 /dev/fd0 /mnt/floppy <--把Linux文件系统格式的软盘安装上来
1. 装载软盘
首先用mkdir /mnt/floppy 在/mnt目录下建立一个空的floppy目录,然后输入mount -t msdos /dev/fd0 /mnt/floppy 将DOS文件格式的一张软盘装载进来,以后就可以在/mnt/floppy目录下找到这张软盘的所有内容。
2. 装载Windows所在的C盘
mkdir /mnt/c 在/mnt目录下建立一个空的c目录;
mount -t vfat /dev/hda1 /mnt/c 将Windows的C盘按长文件名格式装载到/mnt/c目录下,以后在该目录下就能读写C盘根目录中的内容。
3.装载光盘
mkdir /mnt/cdrom 在/mnt目录下建立一个空的cdrom目录;
mount -t iso9660 /dev/hdc /mnt/cdrom 将光盘载入到文件系统中来,将在/mnt/cdrom目录下找到光盘内容。有的Linux版本允许用mount /dev/cdrom或mount /mnt/cdrom命令装载光盘。
要注意的是,用mount命令装入的是软盘、光盘,而不是软驱、光驱。有些初学者容易犯一个毛病,以为用上面命令后,软驱就成了/mnt/floppy,光驱就成了/mnt/cdrom,其实不然,当你要换一张光盘或软盘时,一定要先卸载,再对新盘重新装载。
4.卸载
卸载的命令格式是:umonut 目录名,例如要卸载软盘,可输入命令umonut /mnt/floppy。要注意的是,在卸载光盘之前,直接按光驱面板上的弹出键是不会起作用的。
5.13 自动装载Windows下的分区
编辑/etc/fstab就可实现启动后自动装载windows下的分区,具体操作如下:
用vi编辑fstab文件,然后加入要启动时装载的Windows分区,如:
/dev/hdc1 /mnt/c vfat defaults 0 0
/dev/hdc5 /mnt/d vfat defaults 0 0
保存后就完成了对c,d盘的自动装载,重启后生效,其它盘依此类推。
fstab栏位说明:
第一栏(fs_spec):实际的device 名称
第二栏(fs_file):对应到的目录结构(mount point)
第三栏(fs_vfstype):该 partition 的档案系统,常见的有:minix、ext、ext2、msdos、iso9660、nfs、swap(vfat指的是fat32格式)
第四栏(fs_mntops):在mount时的参数
第五栏(fs_freq):在使用dump时是否记录,不需要则输入0
第六栏(fs_passno):决定在开机时执行fsck的先后顺序
5.14 掌握Linux的目录结构
Linux的目录结构与Windows不同,而且在Windows下看不到Linux的目录,反过来,Linux也看不到Windows下的目录。Linux下各目录的含义如下:
5.15 如果找不到网卡,如何配置网卡?
LINUX如果不能自动检测网卡,需要手工设置。修改/etc/conf.modules(如果没有就创建一个),并添加如下内容:
alias eth0 ne
options ne io=0x300
或者在lilo.conf中添加如下内容:
append="ether=10,0x300,eth0"
5.16 如何卸载linux分区:
Win2000中可直接用磁盘管理器删除linux分区!
在win98和winme中,通过软件来删除linux分区,如pqmagic,diskman等磁盘工具软件!
在linux中可通过安装时的定制分区和linux自带得fdisk来删除!
5.17 软件安装与卸载:
安装:rpm –i
卸载:rpm-e
5.18 X窗口的设置:
以root用户身份进入系统并运行下面的命令:
~# Xconfigurator <回车>
手工启动X:输入startx
5.19 配置声卡:
以root用户身份进入系统并运行下面的命令:
~# /usr/sbin/sndconfig。
5.20 设置ip地址:
命令:ifconfig eth0 192.168.1.1 netmask 255.255.255.0
查看:ifconfig
卸载:ifconfig down eth0
实验二 作业/进程调度算法设计与实现
一、 实验目的
调度是操作系统的主要功能,本实验通过自行设计实现的调度程序,使同学们加深对作业/进程调度功能的理解,从而掌握操作系统的基本原理。同时还可以提高同学们的编程能力。
二、 实验总要求
用C语言编制按优先级调度三个进程的调度程序,其中要求进程的优先级随着运行时间的延长而降低,但却随着等待时间的延长而升高。
三、 实验的具体要求
1、 设计进程控制块为以下结构:
struct PRO
﹛
char id; /*进程的id号,可以表示为a, b, c */
int pri; /*进程的初始优先级*/
int p; /*等待进程可以动态增加的优先级量*/
int s; /*运行进程应该动态减少的优先级量*/
int status; /*表示进程的状态,0为等待,1为运行*/
﹜A={‘a’,2,1,1,0},B={‘b’,1,1,1,0}, C={‘c’,0,1,1,0};
2、 要求接管时钟中断:INT 1Ch
使用到的C语言函数为:
getvect(intno) /*获得intno的中断向量*/(要求保存在一个全局变量中)
setvect(intno,time) /*设置intno的中断向量为函数time的入口地址*/
3、 在自己编制的新的时钟中断处理程序中,完成进程优先级的修改;并记录被中断的次数。
Void interrupt time( )
{
if(A.status==1) A.pri=A.pri-A.s;
else A.pri=A.pri+A.p;
……..
…….
xx++;
}
4、 编制函数select( ),其功能是从三个进程中选择优先级最高的进程,并将其状态设置为运行,其余设置为等待。并返回运行进程的序号供主程序选择运行。
5、 编制函数int prime (int n),功能是判断n是否为素数,如果是素数,返回n;否则返回0。该函数是三个进程的执行过程。
6、 主程序框架如下:
main ( )
{ int a[3]={100,100,100};
int I, j, k, u, v, w=0, x=0, y=0;
char c;
/*获得时钟中断向量*/
/*设置新的中断向量*/
………..
while(xx<300) /*xx是全局变量,用于记录时钟中断的次数;用循环来模拟三个进程的运行过程*/
{u=select ( ); /*调度一次*/
switch (u)
{case0: a[0]++; if(a[0]>10000) a[0]=100; v=prime(a[0]);
if(v) {gotoxy(2,4); printf(“a %6d %6d”, v, w++);} break;
case1:…………………..
case2:…………………..
}
}
/*恢复时钟中断*/
}
四、实验运行结果:
THE PROCESSES ARE PLAYING:
Process id prime times
A 3559 473
B 3541 470
C 3529 467
TIME INTERRUPT: 300
Prime 记录的是各进程终止时的素数值。
Times 记录的是三个进程各执行了多少次。
五、所有的源程序清单。
六、写出实验小结。
实验三 内存管理设计
一、实验目的
内存管理是操作系统的主要功能之一,而内存管理的主要工作是进行内存的分配与回收,本实验通过自行设计实现的动态分区管理程序(按照首次适应算法FF),使同学们加深对内存管理功能的理解,从而掌握操作系统的基本原理。同时还可以进一步提高同学们的编程能力。
二、实验总要求
用C语言按照首次适应算法FF编制以动态分区管理方式进行内存分配和回收的程序,并测试通过。
三、实验的具体要求
1、设计三种结构:
A. 已分配分区说明表;(包括序号、大小、起始地址、状态、作业号)
B. 空闲分区说明表; (包括序号、大小、起始地址、状态、作业号)
C. 作业表。
struct JOB /*作业表的定义*/
{ int m_req; /*作业请求存储器的大小*/
int no; /*作业号*/
int status; /*状态位:未分配或已释放为0,已分配为1*/
struct JOB *next;
}*C,*P,*Q;
struct TAB /*已分配分区说明表和空闲分区说明表的定义*/
{int xh; int dx; int qz; char zt[10]; int no;
struct TAB *next;
}*A,*B,*this,*next, *new;
2、设计两个主要函数:
A. 为I号作业分配存储区的函数fen();
void fen()
{ char ok='n'; int k1,k2,i=1;
seek(7);P=C;
while(P->no!=I && P!=NULL) P=P->next;
if(P==NULL|| P->status==1) goto OUT1;
k1=P->m_req;this=next=B;
while(this!=NULL && this->dx<k1){ next=this;this=this->next;}
if(this==NULL) goto OUT1;
…………………………………….(学生完成)
OUT1: if(ok=='n') printf("Falied");
else printf("OK!!");
getch();
}
B. 回收I号作业分配存储区的函数huan();
void huan()
{char ok='n'; int k1,k2,k3,i=1;
seek(7); P=C;
while(P->no!=I && P!=NULL) P=P->next;
if (P==NULL) goto OUT;
this=next=A;P->status=0;
while(this!=NULL && this->no!=I){next=this;this=this->next;}
if(this==NULL) goto OUT;
k1=this->dx;k2=this->qz;
…………………………………..(学生完成)
this=B;
while(this!=NULL){ this->xh=i;i++;this=this->next; }
OUT: if(ok=='n')printf("Falied");
else printf("OK!!");
getch();
}
3、设计人-机交互界面:
要求一:完成欲分配(回收)存储器的作业序号的输入;
要求二:适时显示A、B、C三表当时的情况;
4、主程序:
供用户选择分配及回收存储器的作业号,每输入一个,立即显示分配、回收及作业表的变化情况,并等待下一次操作。
void seek(int),show(),fen(),creat(),huan();
char a;int I,J;
main()
{new=(struct TAB*)malloc(sizeof(struct TAB));
new->xh=1;new->dx=1024;new->qz=0; /*定义内存可分配空间最大为1024*/
strcpy(new->zt,"idlesse");
new->next=NULL;B=new;C=NULL;
START:seek(1); scanf("%c",&a);
if(a!='1' && a!='2' && a!='3' && a!='4') goto START;
switch(a)
{ case '1':{creat(); show(); goto START;}
case '2':{fen(); show(); goto START;}
case '3':{huan(); show(); goto START;}
case '4': break; /*用户操作界面,1-生成作业表,2-分配内存空间,3-回收内存空间,4-退出程序。(选1、2、3后每次都显示三个表)*/
}
textbackground(0);textcolor(15);window(1,1,80,25);clrscr();
}
5、create( )函数及seek( )函数:
void creat()
{int i;seek(6);
P=(struct JOB *)malloc(sizeof(struct JOB));
P->m_req=J;P->next=NULL; P->status=0;i=2;Q=C;
…………………………(学生完成)
}
void seek(int c1)
{ switch(c1)
{ case 1:window(1,1,80,25);textbackground(0);clrscr();
window(20,4,60,22);textbackground(1);
textcolor(14); clrscr();gotoxy(6,2);
printf("******* EXPERIMENT No.3 *******");
gotoxy(14,3); printf("memory manage");
gotoxy(13,5); printf("1--creat job");
gotoxy(13,7); printf("2--assign task");
gotoxy(13,9); printf("3--reclaim task");
gotoxy(13,11); printf("4--quit");
gotoxy(13,13); printf("INPUT YOUR CHOICE:");
break; /*主菜单*/
case 2:textbackground(5); textcolor(14);
window(1,2,30,24); clrscr();
printf(" NO. SIZE ADDRESS STATUS(A)"); break;/*已分配分区说明表表头*/
case 3:textbackground(7); textcolor(4);
window(31,2,60,24); clrscr();
printf("NO. SIZE ADDRESS STATUS(B)"); break;/*空闲分区说明表表头*/
case 4:textbackground(12);textcolor(14);
window(61,2,80,24);clrscr();
printf("NO. M_REQ STATUS(C)"); break; /*作业表表头*/
case 5:textbackground(0);textcolor(15);
window(1,25,80,25);clrscr();gotoxy(30,1);
printf("PRESS ANY KEY TO BACK"); break;
case 6:textbackground(15);textcolor(0);window(30,10,50,14);
clrscr();gotoxy(4,2);printf(" SIZE:");
scanf("%d",&J);gotoxy(4,4);printf(" CREAT OK!!");
getch();break;
case 7:textbackground(15);textcolor(0);window(30,10,50,14);
clrscr();gotoxy(4,2);printf("INPUT NO:");
scanf("%d",&I);gotoxy(4.4),printf(" RESULT:");break;
}
}
四、实验运行结果:(仅供参考)
PRESS ANY KEY TO BACK
五、所有的源程序清单。
六、写出实验小结。
实验报告20xx20xx学年第二学期课程名称实验名称实验时间指导单位操作系统ALinux操作使用编程20xx年5月6日计算机学院计…
一设计题目进程管理及理解和增加Linux系统调用二设计时间和地点设计时间20xx年12月26日20xx年12月29日设计地点装备制…
操作系统课程设计实验报告学号姓名苏州大学计算机科学与技术学院20xx年9月操作系统课程设计实验报告目录目录1一实验环境2二实验报告…
linux操作系统实验报告书1一实验名称Linux基本命令的使用二实验目的1进一步练习Linux登录和退出的方法2练习与目录和文件…
实验一Linux的基本操作和常用命令的使用一实验目的1学会安装Linux操作系统2掌握Linux系统的一些基本操作3掌握常用Lin…
沈阳航空航天大学Linux系统操作实习报告院系计算机学院专业计算机科学与技术班级84010103学号20xx040101061姓名…
实验一Linux的基本操作和常用命令的使用一实验目的1学会安装Linux操作系统2掌握Linux系统的一些基本操作3掌握常用Lin…
Linux系统操作实习报告院系班级学号姓名实习内容Linux的系统操作实习的第一天尚观科技长期开发高端UNIXLinux嵌入式开发…
实验八Linux的系统及网络管理实验班级:k1273-5姓名:李远琳学号:20xx9730516上机时间:20xx年x月x日任课教…