当前位置:文档之家› 实验二操作系统安全配置

实验二操作系统安全配置

实验二操作系统安全配置
实验二操作系统安全配置

实验二操作系统安全配置

【实验目的】

1.掌握使用安全策略设置的方法,了解安全策略的主要内容和用途

2.掌握用计算机管理工具管理本地用户帐户的方法,了解Windows下帐户的命名规则和口

令要求

3.掌握Windows下审核策略的设置方法,了解审核策略的制定准则

4.掌握Windows环境中网络服务和端口的安全管理技术

5.掌握Windows下IPSec策略的配置方法,利用IPSec进行安全传输

【实验设备及环境】

1.Windows XP操作系统

2.Windows Server 2003操作系统(虚拟机)

【实验导读】

1.安全策略设置

操作系统的安全配置是整个操作系统安全策略的核心,其目的就是从系统根源构筑安全防护体系,通过用户和密码管理、共享设置、端口管理和过滤、系统服务管理、本地安全策略、外部工具使用等手段,形成一整套有效的系统安全策略。Windows系统安装的默认配置是不安全的,在系统使用前,应该进行一些设置,以使系统更安全。

通过本地安全策略可以控制:

●访问计算机的用户;

●授权用户使用计算机上的哪些资源;

●是否在事件日志中记录用户或组的操作。

2.用户管理

在Windows 中,用户管理对于系统和组织安全性非常关键,在组织内部,应该存在用来确定每个新用户具有的正确权限的过程,当用户离开组织时,应该具有保证用户不能再访问系统的过程。

⑴Windows用户帐户

Windows提供三种类型的用户帐户:本地用户帐户、域用户帐户和内置用户帐户。本地用户帐户允许用户登录到一台特定的计算机上,从而可以访问该计算机上的资源。域用户帐户允许用户登录到域中从而可以访问网络中的资源。内置用户帐户允许用户执行管理任务或者访问本地和网络资源。

一般Administrator帐户不能被删除,在实际应用时为了增加入侵难度,可以更改Administrator帐户名,比如改成guestone。

⑵帐户规则

①命名规范

命名规范确定域中的用户如何被标识,命名规范可参考表2-1

表2-1 命名规范

②口令要求

为了保护对计算机的访问,每个用户必须有口令,对于口令有以下要求:

●一定为Administrator设定一个安全的口令;

●使用难以猜测的口令,例如避免使用和用户名称明显相关的口令;

●口令可以多达128个字符,推荐使用最少8个字符的口令;

●使用大写和小写、数字和有效的非字母符号进行结合的口令。

3.系统审核

安全审核是Windows 2000最基本的入侵检测方法。当有人尝试对系统进行某种方式(如尝试用户密码,改变帐户策略和未经许可的文件访问等等)入侵的时候,都会被安全审核记录下来。很多的管理员在系统被入侵了几个月都不知道,直到系统遭到破坏。

4.网络服务和端口管理

Windows中有许多用不着的服务自动处于激活状态,Terminal Services(终端服务)和IIS(Internet 信息服务)等都可能给系统带来安全漏洞。为了能够在远程方便的管理服务器,很多机器的终端服务都是开着的,如果开了,要确认已经正确的配置了终端服务。有些恶意的程序也能以服务方式悄悄的运行服务器上的终端服务。要留意服务器上开启的所有服务并每天检查。

另外,需要把系统用不着的网络端口也关闭,防止黑客的攻击。用端口扫描器扫描系统所开放的端口,在Winnt\system32\drivers\etc\services文件中有知名端口和服务的对照表可供参考。如果配置一台Web服务器,只允许TCP的80端口通过就可以了。TCP/IP筛选器是Windows自带的防火墙,功能比较强大,可以替代防火墙的部分功能。

5.IPSec策略

IPsec在网络层提供安全服务,它能使系统按需选择安全协议,决定服务所使用的算法及放置密钥到相应位置。在Windows操作系统中内嵌了对IPsec的支持,可以方便的建立主机到主机,网络到网络的安全通信。IPsec适用于基于IPsec策略的通信,可以使用IPsec 策略来决定何时使用IPsec保护计算机之间的通信。

创建 IPsec 策略时,需要配置 IPsec 规则(这些规则确定 IPsec 的行为)以及设置(设置的应用与配置的规则无关)。配置 IPsec 策略后,必须将该策略指派给一台计算机才能实施该策略。虽然在一台计算机上可以存在多个 IPsec 策略,但每次只能将一个IPsec 策略指派给一台计算机。

IPsec 规则确定 IPsec 必须对哪些类型的通信流进行检查;是允许通信流、阻止通信流还是协商安全性;如何对 IPSec 对等方进行身份验证;以及其他设置。配置 IPsec 规则时,可以配置筛选器列表,该列表包含一个或多个筛选器、筛选器操作、身份验证方法、连接类型和 IPsec 封装模式(传输模式或隧道模式)。 IPsec 规则通常是针对特定用途(例如,“阻止所有从 Internet 到 TCP 端口 135 的入站通信流”)配置的。筛选器定义了要检查的通信流(这与防火墙规则类似)以及源和目标 IP 地址、协议和端口号(如果适用)。筛选器操作定义了网络通信流的安全性要求。

【实验任务及内容】

1.安全策略配置

⑴以系统管理员的身份登录到Windows XP操作系统,对密码策略进行修改,选择【控制面板】|【管理工具】【本地安全策略】|【帐户策略】|【密码策略】,如图2-1所示。

图2-1 密码策略

⑵双击右侧【密码必须符合复杂性要求】,出现如图2-2所示的界面。如果启用该策略,则密码必须符合以下最低要求。

①不能明显包含用户帐户名或用户全名的一部分;

②长度至少为六个字符;

③必须包含以下四类字符中的三类字符:

●英文大写字母( A – Z )

●英文大写字母( a – z )

●10个基本数字( 0 – 9 )

●非字母字符( 例如!、$、#、% )

⑶双击右侧【密码长度最小值】,出现如图2-3所示的界面。对密码长度最小值进行修

图2-3 密码复杂性要求图2-4 密码长度最小值策略设置

⑷双击右侧【密码最长存留期】,出现如图2-4所示的界面。该安全设置确定系统要求用户更改密码之前可以使用该密码的时间,范围是1~999天,默认为42天,设置为0表示密码永不过期。

⑸双击右侧【密码最短存留期】,出现如图2-5所示的界面。该安全设置确定用户在可以更改密码之前必须使用该密码的时间。可以设置为1~998天,密码最短使用期限必须小

于密码最长使用期限。

图2-4密码最长存留期图2-5 密码最短存留期

⑹双击右侧【强制密码历史】,出现如图2-6所示的界面。该安全设置确定与某个用户帐户相关的密码的数量,可以设置为0~24之间。该策略可以防止用户重新使用旧密码,确保旧密码不能继续使用,从而能够增强安全性。

⑺双击右侧【为域中所有用户使用可还原的加密来存储密码】,出现如图2-7所示的界面。该安全设置确定操作系统是否使用可还原的加密来存储密码,此策略为某些应用程序提供支持,这些应用程序使用的协议需要用户密码来进行身份验证。使用可还原的加密储存密码与储存纯文本密码在本质上是相同的。因此,除非应用程序需求比保护密码信息更重要,否则绝不要启用此策略。

图2-6 强制密码历史图2-7 用可还原的加密来存储密码从上面这些设置项中我们不难得到一个最简单有效的密码安全方案,即首先启用“密码必须符合复杂性要求”策略,然后设置“密码最短存留期”,最后开启“强制密码历史”。设置好后,在“控制面板”中重新设置管理员的密码,这时的密码不仅本身是安全的(不低于6位且包含不同类别的字符),而且以后修改密码时也不易出现与以前重复的情况了,这样的系统密码安全性非常高。

2.添加和管理本地用户

⑴以系统管理员的身份登录到Windows XP操作系统,通过【控制面板】|【管理工具】

|【计算机管理】进入【计算机管理】界面。选择左侧【本地用户和组】|【用户】,出现如图2-8所示的界面。

图2-8 用户管理界面

⑵右击【用户】条目,从菜单中选择【新用户】。添加用户名为test的用户。如图2-9所示。如果在密码策略中启用了复杂性密码要求,这时系统会提示密码不符合复杂性要求,需要按照密码复杂性要求选择密码。

图2-9 添加新用户

⑶为当前用户选择合适的组,默认的当前用户属于users组,下面提升test的权限,把它放入Administrators组中。方法是:在用户列表中双击test用户,出现用户属性界面,选择【隶属于】选项卡,单击【添加】按钮,出现如图2-10所示界面,在【输入对象名称来选择】编辑框中输入Administrators,单击右侧【检查名称】按钮,出现Administrators 组的信息,再单击【确定】即可。

图2-10 添加用户到系统管理员组中

3.添加域用户

⑴以Domain Admins组成员的身份登录Windows Server 2003操作系统(虚拟机),然后打开【控制面板】|【管理工具】|【Active Directory用户和计算机】,如图2-11所示。

图2-11【Active Directory用户和计算机】管理界面

⑵右键单击User选项,选择【新建】|【用户】。

⑶输入【姓】|【名】以及“用户登录名”,如图2-12所示,然后单击【下一步】。

图2-12 输入用户信息

⑷输入并确认密码,清除【用户下次登录时需更改密码】复选框,如图2-13所示,然后单击【下一步】。

图2-13 输入新用户密码

⑸在右栏中找到刚加入的用户myuser,双击出现该用户的属性信息,单击【成员属于】选项卡,可以修改用户所属的组,修改用户的权限,如图2-14所示。

图2-14 新用户的属性

3.系统审核

设置审核策略的步骤如下:

⑴以系统管理员的身份登录到Windows XP操作系统,对审核策略进行修改,选择【控

制面板】|【管理工具】|【本地安全策略】|【审核策略】,出现如图2-15所示的管理界面。

图 2-15 审核策略管理界面

⑵双击右侧栏目的【审核对象访问】,出现如图2-16所示的管理界面,对对象访问的审

核策略进行修改。修改完成后单击【确定】即可。

图2-16 审核对象访问策略管理界面

⑶右键单击想要审核的文件或文件夹,选择弹出菜单的【属性】命令,接着在弹出的窗口中选择【安全】标签。单击【高级】按钮,然后选择【审核】标签,再单击【添加】按钮,出现如图2-17所示的界面,在此处可以对要审核的行为进行编辑。

图2-17 Windows文件夹的审核项目

4. 网络服务和端口管理

以Domain Admins组成员的身份登录Windows Server 2003操作系统(虚拟机)。

⑴服务管理:

①选择【控制面板】|【管理工具】|【服务】,如图2-18所示。

图2-18 服务管理界面

②在右侧窗体中单击某一服务,在【操作】菜单上,单击【启动】、【停止】、【暂停】等命令对服务进行管理。

③要配置服务的启动方式,右键单击要配置的服务,选择【属性】,在【常规】选项卡上选择【启动类型】列表中的【自动】【手动】或【禁用】,如图2-19所示。【登录】选项卡中可以指定服务用来登录的用户帐户。

图2-19 服务的启动方式

⑵关闭不用的端口。关闭端口意味着减少功能,如果服务器安装在防火墙的后面,被入侵的机会就会少一些,但是不可以认为高枕无忧了。在Winnt\system32\drivers\etc\Winnt \system32\drivers\etc\services文件中有知名端口和服务的对照表可供参考。按顺序打开【本地连接】|【属性】|【Internet协议(TCP/IP)】|【属性】,然后单击【高级】|【选项】|【TCP/IP筛选】|【属性】,根据需要的服务开设端口,如图2-20所示。

图2-20 根据需要开放端口

⑶禁止建立空连接。空连接使用的端口号是139,通过空连接可以复制文件到远端服务器,默认情况下,任何用户可通过空连接连上服务器,从而枚举帐号并猜测密码,这是一个漏洞。通过下面两种方法禁止建立空连接:

①在注册表中找到相应的键值HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\LSA,将DWORD值RestrictAnonymous的键值改为1

②设置【本地安全策略】|【本地策略】|【安全选项】中的“网络访问:不允许 SAM 帐户和共享的匿名枚举”为启用。

5. IPSec 策略配置

⑴建立IP筛选器表

①登录Windows XP操作系统,选择【控制面板】|【管理工具】|【本地安全策略】,右键单击【IP安全策略,在本地计算机】,选择【管理IP筛选器表和筛选器操作】,出现如图2-21所示。

图2-21 开始IPSec 策略配置

②在【管理IP筛选器表和筛选器操作】对话框中选择【管理IP筛选器列表】选项卡,然后单击【添加】按钮,出现【IP筛选器列表】对话框,在【名称】文本框中输入“进站TCP 21”,然后在【描述】文本框中输入“允许到本机TCP端口21的进站通信”,如图2-22所示。

图2-22 IP筛选器列表对话框

③清除【使用“添加向导”】复选框,然后单击【添加】按钮,出现【筛选器属性】对话框。选择【寻址】选项卡,在【源地址】框中选择“任何IP地址”,,在【目标地址】框中选择“我的IP地址”,如图2-23所示。然后选择【协议】选项卡,在【选择协议类型】框中选择“TCP”,在【到此端口】中输入“21”,如图2-24所示。

⑵创建关于上述筛选器的IPSec 策略。

①单击【创建IP安全策略】,在向导中输入名称“进站TCP 21端口”,在描述中输入“允许进入本机的TCP 21端口”,如图2-25所示。单击【下一步】按钮,清除“激活默认响应规则”复选框,然后单击【下一步】按钮。

图2-25 编辑安全策略名称

②在【正在完成IP安全策略向导】对话框中,单击以选中【编辑属性】复选框,然后单击【完成】按钮。选择【规则】选项卡,清除【使用“添加向导”】复选框,然后单击【添加】按钮,出现如图2-26所示的界面,选择【IP筛选器列表】,选中【进站TCP 21端口】选项。

图 2-26 规则属性编辑

③选择【筛选器操作】选项卡,选中【许可】,如图2-27所示。

图2-27 筛选器操作

④选择【身份验证方法】选项卡,单击【添加】按钮,添加使用预共享密钥的方式进行身份验证,如图2-28所示。

图 2-28 设置身份认证方式

⑤单击【确定】,完成规则编辑。

到此,本机的IPSec 配置完成,IPSec 策略将检查进入本机的TCP端口数据包,将这些数据包与筛选器操作相匹配。

⑶以类似的方式配置Windows Server 2003(虚拟机)下的IPSec,使得虚拟机可以访问主机上的21端口,注意配置身份验证方式使用同样的预共享密钥进行身份认证。

⑷用抓包软件测试主机和虚拟机之间的通信结果。

【实验报告】

1.实验目的;

2.实验设备及环境;

3.实验内容及任务;

4.实验方法与步骤;

i.详细描述加入本地用户的过程,并且使用该用户登录系统进行权限测试。

ii.根据以下要求制定系统的审核策略:记录对计算机不成功的访问尝试;记录对C:\WINNT\system32\drivers\etc\hosts文件(或者其它文件)的读写操作;

记录一个管理员执行的操作以跟踪未授权的更改。

iii.根据实际需要找出本系统不需要的服务,把这些服务停掉。

iv.根据实际需要制定出本系统所需要的端口,把其余的端口关掉。

v.详细描述配置IPSec的过程,叙述测试结果。

5.实验结果与数据分析;

6.分析讨论。

【分析讨论与思考】

1.描述各个密码安全策略的主要作用。

2.如何设置安全性高且容易记忆的口令了?

3. 简述审核策略、密码策略和帐户策略的含义。

4. 如何使用安全策略对域用户的权限进行设置。

5.分析系统审核在系统安全中的作用。

6.查找资料,分析Windows中空连接可能带来的危害。

7.分析IPSec可以防止哪些网络攻击。

Linux操作系统安全配置

【实验目的】

1.了解Ubuntu操作系统的特点;

2.掌握Ubuntu操作系统的安全配置方法;

【实验设备及环境】

1.Ubuntu9.04操作系统(虚拟机)

【实验导读】

目前已有大量各种各样基于 GNU/Linux 的操作系统,例如:Debian, SuSE, Gentoo, RedHat和Mandriva。Debian是一个广受称道、技术先进且有着良好支持的发行版,Ubuntu是一个自由、开源的操作系统,它基于Debian,但有自己的发行版(每六个月发行一版),以用户为核心,简单易用(“能用”就行),承诺对每个发行版有18个月的安全升级支持。Ubuntu自带最新版的Gnome桌面,拥有大量的服务和桌面应用程序,Ubuntu十分注重系统的安全性,其采用Sudo工具,所有系统相关的任务均需使用此指令,并输入密码,比起传统以登入系统管理员帐号进行管理工作有更佳的安全性。

Ubuntu亦注重系统的可用性,其设计为在标准安装完成后即可以让使用者投入使用的操作系统。举例来说,完成安装后,使用者不用另外安装网页浏览器、办公室软件、多媒体软件与绘图软件等日常应用的软件,因为这些软件已被安装,并可随时使用。

【实验任务及内容】

本实验在Ubuntu9.04桌面版下实现,这是目前已发布的Ubuntu的最新版。

1.设置口令最小长度和最短使用时间

口令是系统中认证用户的主要手段,系统安装时默认的口令最小长度通常为5,但为保证口令不易被猜测攻击,可增加口令的最小长度,至少等于8。为此,需修改文件/etc/login.defs中参数PASS_MIN_LEN。同时应限制口令使用时间,保证定期更换口令,建议修改参数 PASS_MIN_DAYS。具体步骤如下:

①打开终端,键入命令:gedit,如图3-1所示,这将以root身份打开文档编辑器。

图3-1 运行命令打开文档编辑器

②在gedit视图下,打开文件 /etc/login.defs,增加参数PASS_MIN_LEN,设为8;修改参数 PASS_MIN_DAYS,设为30。如图3-2所示。

图3-2 修改口令参数

#PASS_MAX_DAYS 密码有效期天数设置为9999,实际上就是关闭了口令老化功能。

#PASS_MIN_DAYS 表示自从上次密码修改以来多少天后用户才被允许修改口令。

下面操作中对文件的编辑和修改,都是在gedit中完成。

2.用户超时注销

如果用户离开时忘记注销账户,则可能给系统安全带来隐患。可修改/etc/profile文件,保证账户在一段时间没有操作后,自动从系统注销。

用gedit打开并编辑文件/etc/profile,在“HISTFILESIZE=”行的下一行增加如下一行:TMOUT=600。则所有用户将在10分钟无操作后自动注销。

3.禁止访问重要文件

对于系统中的某些关键性文件如inetd.conf、services等可修改其属性,防止意外修改和被普通用户查看。

首先改变文件属性为600:

# chmod 600 /etc/inetd.conf

保证文件的属主为root,然后还可以将其设置为不能改变:

# chattr +i /etc/inetd.conf

这样,对该文件的任何改变都将被禁止。

只有root重新设置复位标志后才能进行修改:

# chattr -i /etc/inetd.conf

4.允许和禁止远程访问

在Ubuntu中可通过/etc/hosts.allow 和/etc/hosts.deny 这2个文件允许和禁止远程主机对本地服务的访问。通常的做法是:

①用gedit打开并编辑hosts.deny文件,加入下列行:

# Deny access to everyone.

则所有服务对所有外部主机禁止,除非由hosts.allow文件指明允许。

②用gedit打开并编辑hosts.allow 文件,可加入下列行:

#Just an example:

ftp: 202.118.18.18 https://www.doczj.com/doc/1010420555.html,

则将允许IP地址为202.118.18.18和主机名为https://www.doczj.com/doc/1010420555.html,的机器作为Client 访问FTP服务。

③设置完成后,可用tcpdchk检查设置是否正确。

5. 限制Shell命令记录大小

默认情况下,bash shell会在文件$HOME/.bash_history中存放多达500条命令记录(根据具体的系统不同,默认记录条数不同)。系统中每个用户的主目录下都有一个这样的文件。用上述的方法打开并编辑/etc/profile文件,修改其中的选项如下:HISTFILESIZE=30或HISTSIZE=30。

6.注销时删除命令记录

编辑/etc/skel/.bash_logout文件,增加如下行:

rm -f $HOME/.bash_history

这样,系统中的所有用户在注销时都会删除其命令记录。

如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history 文件,增加相同的一行即可。

7.限制超级用户的权力

root是所有Linux系统保护的重点,由于它权力无限,因此最好不要轻易将超级用户授权出去。但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户的权限。Sudo就是这样的工具。

Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。例如,应用sudo 后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。

Sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。从sudo的日志中,可以追踪到谁做了什么以及改动了系统的哪些部分。

8.更改SSH端口,最好改为10000以上,别人扫描到端口的机率也会下降

用上述方法打开并编辑文件/etc/ssh/sshd_config,将PORT改为1000以上端口。

9.防止其他主机PING本机,可以采用下列方法:

⑴在终端原形命令:echo 1> /proc/sys/net/ipv4/icmp_ignore_all

⑵用防火墙禁止(或丢弃)icmp包

①首先启用Iptables服务:services Iptables start

②配置规则:iptables –A INPUT -p icmp –j DROP

10.不要显示出操作系统和版本信息。

如果希望某个人远程登录到你的服务器时不要显示操作系统和版本信息,打开并编辑/etc/inetd.conf 文件,在telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd 一行后加上-h ,加-h标志在最后使得telnet后台不要显示系统信息,而仅仅显示login: 。

【实验报告】

1.实验目的;

2.实验设备及环境;

3.实验内容及任务;

4.实验方法与步骤(详细描述实验过程);

5.实验结果与数据分析;

6.分析讨论。

7.

【分析讨论与思考】

1. 根据实验过程,总结实验心得(重点包括实验中遇到的问题和解决方法)。

2. 查阅资料,分析Iptables的安全机制。

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.doczj.com/doc/1010420555.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

操作系统实验 磁盘调度算法

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

第六讲磁盘调度算法 一、实验概述 1. 实验名称 磁盘调度算法 2. 实验目的 (1)通过学习EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机; (2)观察 EOS 实现的FCFS、SSTF和 SCAN磁盘调度算法,了解常用的磁盘调度算法; (3)编写 CSCAN和 N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。 3. 实验类型 验证性+设计性实验 4. 实验内容 (1)验证先来先服务(FCFS)磁盘调度算法; (2)验证最短寻道时间优先(SSTF)磁盘调度算法; (3)验证SSTF算法造成的线程“饥饿”现象; (4)验证扫描(SCAN)磁盘调度算法; (5)改写SCAN算法。 二、实验环境 在OS Lab实验环境的基础上,利用EOS操作系统,由汇编语言及C语言编写代码,对需要的项目进行生成、调试、查看和修改,并通过EOS应用程序使内核从源代码变为可以在虚拟机上使用。 三、实验过程 1. 设计思路和流程图 (1)改写SCAN算法 在已有 SCAN 算法源代码的基础上进行改写,要求不再使用双重循环,而是只遍历一次请求队列中的请求,就可以选中下一个要处理的请求。算法流程图如下图所示。 图 3.1.1 SCAN算法IopDiskSchedule函数流程图(2)编写循环扫描(CSCAN)磁盘调度算法 在已经完成的SCAN算法源代码的基础上进行改写,不再使用全局变量ScanInside 确定磁头移动的方向,而是规定磁头只能从外向内移动。当磁头移动到最内的被访问磁道时,磁头立即移动到最外的被访问磁道,即将最大磁道号紧接着最小磁道号构成循环,进行扫描。算法流程图如下图所示。

操作系统实验1

#include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->ntime)<(ready->ntime))) /*运行时间最短者,插入队首*/ { p->link=ready; ready=p; } else /* 进程比较运行时间优先级,插入适当的位置中*/ { first=ready; second=first->link; while(second!=NULL) { if((p->ntime)<(second->ntime)) /*若插入进程比当前进程所需运行时间短,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程运行时间最长,则插入到队尾*/ { first=first->link; second=second->link; } } if(insert==0) first->link=p; } }

操作系统实验报告-实验二

操作系统实验报告——实验二:C编程环境 实验目的 1.熟悉Linux下C程序设计的环境; 2.对系统调用有初步了解。 实验内容 1.Linux下C语言程序的开发过程 a、在用户主目录下用vi编辑C语言源程序(源程序已附后),如:$vi hello.c。 b、用gcc编译C语言源程序:$gcc ./hello.c -o example 这里gcc是Linux下的C语言程序编译器(GNU C Compiler),./hello.c表示待编译的源文件是当前工作目录下的hello.c,-o example表示编译后产生的目标代码文件名为example。 c、若编译不正确,则进入vi修改源程序,否则,运行目标代码:$./example 。注意: 这只是gcc最基本的用法,其他常用选项有:-c , -S , -O , -O2, -g 等。 2.编辑、调试下面c语言程序,说明该程序的功能。 #include #include int main() { int n,a[200],carry,temp,i,j,digit = 1; printf("Please input n:"); scanf("%d",&n); a[0] = 1; for( i = 2; i <= n; ++i) { for( j = 1, carry = 0; j <= digit; ++j) { temp = a[j-1] * i + carry; a[j-1] = temp % 10; carry = temp / 10; } while(carry) { a[++digit-1] = carry % 10; carry /= 10; } } printf("Result is:\n%d ! = ",n); for( i = digit; i >=1; --i) { printf("%d",a[i-1]); }

操作系统第一次与第二次实验报告

实验报告 实验1 Linux基本环境 1、实验目的 (1)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux 有一个感性认识。 (2)学会使用vi编辑器编简单的C语言程序,并能对其编译和调试。 2、实验内容 (1)以root用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点; (2)使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out 来进行输出结果。 3、实验结果 (1) a.输入“ls”后,vi编辑器显示主文件夹下的所有文件及目录名。使用dir 查看当前目录内容。 b.输入“cat”后,会显示文件:cat 文件名建立文件:cat >文件名, ctrl+d结束输入。 c.输入“cd”,改变当前目录,cd ..回到上层目录,cd /回到根目录。(2) a.在命令行键入vi filename.c 然后回车。 b.按一下键盘上的I键(insert),进入编辑模式。(a与i是相同的用法) c.当文件编辑完后,按Esc 键;输入:wq) ,保存退出。 d.对刚才编写的程序进行编译。编译的命令是:gcc filenam e.c e.最后运行程序,命令式:./a.out 4、实验总结 通过做本次实验,我熟悉了Linux环境下的基本操作,学会使用各种命令去操作Linux,也学会使用vi编辑器编辑简单的程序,并能对其编译

和调试。了解并掌握了对vi编辑器的一些基本使用方法等。可能由于初次接触Linux环境,所以刚开始编程时出现了许多错误,但我及时找同学或老师来帮忙,解决我的问题,这些错误能够让我更清楚地了解自己对哪些知识掌握的不够透彻,让自己对知识掌握的更牢固。 实验2 进程管理 1、实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 2、实验内容 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕 上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和 字符“c”。试观察纪录屏幕上的显示结果,并分析原因。 (2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程 之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号 后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信 号后分别输出下列信息后终止: Child Processll is Killed by Parent!

操作系统实验08

实验8 缺页统计 实验目的 学习虚拟内存的基本原理和Linux虚拟内存管理技术;深入理解、掌握Linux的按需调页过程。 复习巩固Linux内核模块和虚拟文件系统的知识和运用能力。 实验原理 由于每发生一次缺页都要进入缺页中断服务函数do_page_fault一次,所以可以认为执行该函数的次数就是系统发生缺页的次数。通过定义一个全局变量pfcount作为计数变量,每次执行do_page_fault时,该变量值加1,从而得到一段时间内的缺页次数。 至于经历的时间则可以利用系统原有的变量jiffies。这是一个系统的计时器,在内核加载完以后开始计时,以10ms(缺省)为计时单位。 借助内核模块技术通过/proc虚拟文件系统来读出上述两个变量的值。在/proc文件系统下建立目录pf以及在该目录下的只读文件pfcount和jiffies。 实验内容 完成《边干边学》第7.3.1节的“系统缺页次数”实验。 1.修改现有的内核代码,在系统中添加一个全局变量pfcount。配置、编译、安装新 的内核,并重新启动,使用新的内核。 2.编辑、编译、安装新的内核模块pf,在/proc虚拟文件系统中创建目录pf以及只 读文件pfcount和jiffies。 3.编写用户程序,引发足够的缺页中断;观察一定时间内的缺页状况。 4.选做:学习《边干边学》第7章,阅读相关的内核源代码,分析Linux系统中缺页 的处理过程。 实验步骤 一、修改现有内核代码,添加缺页计数器pfcount 1.以root帐号登录,解包内核源码,并转入内核源码目录 cd /usr/src tar zxvf linux-2.4.18.tar.gz cd linux 2.修改include/linux/mm.h文件 添加变量pfcount的声明 即添加extern unsigned long volatile pfcount;一行

操作系统lab2实验报告

HUNAN UNIVERSITY 操作系统实验报告

目录 一、内容 (3) 二、目的 (3) 三、实验设计思想和练习题 (3) 练习0:填写已有实验 (3) 练习1:实现 first-fit 连续物理内存分配算法(需要编程) (3) 练习2:实现寻找虚拟地址对应的页表项(需要编程) (8) 练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程) (11) 运行结果 (13) 四、实验体会 (13)

一、内容 本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。 二、目的 1.理解基于段页式内存地址的转换机制; 2.理解页表的建立和使用方法; 3.理解物理内存的管理方法。 三、实验设计思想和练习题 练习0:填写已有实验 使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。 练习1:实现 first-fit 连续物理内存分配算法(需要编程) 在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c 中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: 你的first fit算法是否有进一步的改进空间。 解答: 分析思路: (1)数据结构: A.每个物理页利用一个Page结构体表示,查看kern/mm/memlayout.h包括:

操作系统第二次实验first-fit, next-fit

操作系统第二次实验报告 物联网1301 齐亨13516110 一、实验简介 本实验要求建造一个没有虚拟功能的内存管理系统。任务如下: ? 设计一个内存管理器,支持至少两种分配策略, 如first-fit, next-fit, best-fit, worst-fit 等。 ? 对不同分配策略的性能进行评估。 二、实验过程 1、first fit(首次适应) 首次适应策略的思路是,分配时在空闲块列表中搜索,找到第一个能够满足请求的块即停止搜索,然后把搜索到的块分割,一部分返回给请求者,另一部分仍然作为空闲块留在空闲列表的原来位置。首次适应策略的问题在于,链表头部区域的块倾向于被首先分割,经过一段时间后,空闲链表头部可能堆积大量小的空闲块,这会导致搜索时间的增加,因为当请求一个头部区域的小块无法满足的块时,需要顺次检查这些小块。 代码如下: #include #include #include int array[99]; int *array_request(int n) { int count=0; int *p=&array[0]; int *l=&array[99]; while(count

} if(count

操作系统作业二

1 填空题 1.设单CPU环境下,有三道作业,它们的提交时间及运行时间如下表: 若采用短作业优先调度策略,作业单道串行运行时的调度次序为 J1,J3,J2 ,平均周转时间= 8 。 2.进程间通信的类型有:基于内存通信、基于文件通信、基于网络通信 和基于报文传递通信。 3.在响应比最高者优先的作业调度算法中,当各个作业等待时间相同时,运行时间短作业将得 到优先调度;当各个作业要求运行的时间相同时,等待时间长得到优先调度。 4.有三个同时到达的作业J1,J2和J3,它们的执行时间分别是T1,T2和T3,且T1

C、多个进程竞争,资源出现了循环等待 D、多个进程竞争共享型设备 3.( C )不是分时系统的基本特征: A、同时性 B、独立性 C、实时性 D、交互性 4.进程所请求的一次打印输出结束后,将使进程状态从(B D) A、运行态变为就绪态 B、运行态变为等待态 C、就绪态变为运行态 D、等待态变为就绪态 5.一作业进入内存后,则所属该作业的进程初始时处于( B C)状态。 A、运行 B、等待 C、就绪 D、收容 6.运行时间最短的作业被优先调度,这种企业调度算法是(C ) A.优先级调度 B.响应比高者优先C.短作业优先D.先来先服务 7.产生死锁的主要原因是进程运行推进的顺序不合适(C ) A.系统资源不足和系统中的进程太多B.资源的独占性和系统中的进程太多 C.进程调度不当和资源的独占性D.资源分配不当和系统资源不足 8. B 是指从作业进入系统到作业完成所经过的时间间隔; D 是从作业进入后备队列起,到被调度程序选中时的时间间隔。 A:响应时间;B:周转时间;C:运行时间; D:等待时间;F:触发时间。 9.CPU的调度分为高级、中级和低级三种,其中低级调度是指 C 调度。 A:作业B:交换C:进程 10. 批处理系统的主要缺点是( B )。 的利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 11. 引入多道程序的目的在于( B A)。 A.充分利用CPU,减少CPU等待时间 B.提高实时响应速度 C 有利于代码共享,减少主、辅存信息交换量充分利用存储器 12. 在分时系统中,时间片一定,(B ),响应时间越长。 A.内存越多 B.用户数越多 C.后备队列 D.用户数越少 13. 我们如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用 SJF B ;为照顾紧急作

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验3报告

实验三、进程通讯 ——管道及共享内存姓名:徐洪班级:10电信实验班学号:Q10600109 实验用学号:e06620111 一、实验目的 (1)加深对管道概念的理解。 (2)掌握利用管道进行进程通信的程序设计。 (3)Linux系统的共享内存机制允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的共享存储区机制。 二、实验预备内容 认真阅读实验材料中管道通信及共享内存部分,加深对管道通信及共享内存机制的理解。 三、实验内容 任务一、 (1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析。 (2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。 任务二、 (1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。 四、实验结果 运行例1 反向输出

main() { int x,fd[2],n,i,fs[2]; char buf[30],s[30],m[30],b[30]; pipe(fd); pipe(fs); while ((x=fork())==-1); if (x==0) { close(fd[0]); close(fs[1]); printf("Parent Process!\n"); strcpy(buf,"This is an example\n"); write(fd[1],buf,30); read(fs[0],m,30); printf("Parent Process1!\n"); printf("%s\n",m); } else{ close(fd[1]); close(fs[0]); printf("Child Process!\n"); read(fd[0],s,30); n=strlen(s)-1; for( i=0;i

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

东北大学操作系统第二次实验报告

实验4:进程的管道通信 一、题目:进程的管道通信 二、目的: ●加深对进程概念的理解,明确进程和程序的区别; ●学习进程创建的过程,进一步认识并发执行的实质; ●分析进程争用资源的现象,学习解决进程互斥的方法; ●学习解决进程同步的方法; ●掌握Linux系统进程间通过管道通信的具体实现方法。 三、实验内容 ?使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话(写 的内容自己定,但要有该进程的一些信息); ?父进程从管道中读出来自两个子进程的消息,显示在屏幕上; ?要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的 消息。 四、实验要求 1、这是一个设计型实验,要求自行、独立编制程序; 2、两个子进程要并发执行; 3、实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定; 4、实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。 五、程序流程图

图5.1 父进程流程图

图5.2子进程P1流程图图5.3子进程P2流程图 六、源程序 #include #include #include #include #include #include #include #include

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

操作系统实验报告.实验一_WINDOWS进程初识

操作系统教程 实验指导书

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 答:运行成功,结果: (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) 因为此程序是个死循环,所以运行时间为无穷大。_______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ __________________________________________________________________________

操作系统实验二

GDOU-B-11-112广东海洋大学学生实验报告书(学生用表) 实验名称实验二课程名称操作系统课程号 学院(系) 信息学院专业物联网工程班级1131 学生姓名杨光学号201311672119 实验地点实验日期 实验1:线程的创建与撤销 1.实验目的 (1)熟悉Windows系统提供的线程创建与撤销系统调用。 (2)掌握Windows系统环境下线程的创建与撤销方法。 2.实验要求 能正确使用CreateThread()、ExitThread()及Sleep()等系统调用,进 一步理解进程与线程理论。 代码一: // ThreadCreate.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "ThreadCreate.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // The one and only application object CWinApp theApp; using namespace std; void ThreadName1(); static HANDLE hHandle1=NULL; //用于存储线程返回句柄的变量。 DWORD dwThreadID1; //用于存储线程标识符的变量。 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

相关主题
文本预览
相关文档 最新文档