东北大学操作系统第一次实验报告
操作系统安全实验1实验报告

操作系统安全实验1实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。
二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验设备为个人计算机。
三、实验内容与步骤(一)Windows 10 操作系统安全配置1、账户管理创建新用户账户,并设置不同的权限级别,如管理员、标准用户等。
更改账户密码策略,包括密码长度、复杂性要求、密码有效期等。
启用账户锁定策略,设置锁定阈值和锁定时间,以防止暴力破解密码。
2、防火墙配置打开 Windows 防火墙,并设置入站和出站规则。
允许或阻止特定的应用程序通过防火墙进行网络通信。
3、系统更新与补丁管理检查系统更新,安装最新的 Windows 安全补丁和功能更新。
配置自动更新选项,确保系统能够及时获取并安装更新。
4、恶意软件防护安装并启用 Windows Defender 防病毒软件。
进行全盘扫描,检测和清除可能存在的恶意软件。
(二)Linux(Ubuntu 2004)操作系统安全配置1、用户和组管理创建新用户和组,并设置相应的权限和归属。
修改用户密码策略,如密码强度要求等。
2、文件系统权限管理了解文件和目录的权限设置,如读、写、执行权限。
设置特定文件和目录的权限,限制普通用户的访问。
3、 SSH 服务安全配置安装和配置 SSH 服务。
更改 SSH 服务的默认端口号,增强安全性。
禁止 root 用户通过 SSH 登录。
4、防火墙配置(UFW)启用 UFW 防火墙。
添加允许或拒绝的规则,控制网络访问。
四、实验结果与分析(一)Windows 10 操作系统1、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。
严格的密码策略有效地增加了密码的安全性,减少了被破解的风险。
账户锁定策略在一定程度上能够阻止暴力破解攻击。
《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。
实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。
三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。
在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。
2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。
在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。
3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。
在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。
4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。
在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。
四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。
(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。
(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
操作系统第一次实验报告_操作系统临界区问题

操作系统第一次实验报告_操作系统临界区问题操作系统临界区问题刘唯墨一、实验目的本实验讨论临界区问题及其解决方案。
实验首先创建两个共享数据资源的并发线程。
在没有同步控制机制的情况下,我们将看到某些异常现象。
针对观察到的现象,本实验采用两套解决方案:利用Windows 的mutex 机制采用软件方案然后比较这两种方案的性能优劣。
二、实验步骤1、制造混乱Windows 操作系统支持抢先式调度,这意味着一线程运行一段时间后,操作系统会暂停其运行并启动另一线程。
也就是说,进程内的所有线程会以不可预知的步调并发执行。
为了制造混乱,我们首先创建两个线程t1 和t2。
父线程(主线程)定义两个全局变量,比如accnt1 和accnt2。
每个变量表示一个银行账户,其值表示该账户的存款余额,初始值为0。
线程模拟在两个账户之间进行转账的交易。
也即,每个线程首先读取两个账户的余额,然后产生一个随机数r,在其中一个账户上减去该数,在另一个账户上加上该数。
代码如下:#include#include#includeint accnt1=0;int accnt2=0;double begin=0;double end=0;double time=0;int a=1;//HANDLE hMutex=CreateMutex(NULL,FALSE,NULL); DWORD WINAPI run(LPVOID p) {int counter=0;int tmp1,tmp2,r;//WaitForSingleObject(hMutex,INFINITE);begin=GetTickCount();do {tmp1=accnt1;tmp2=accnt2;r=rand();accnt1=tmp1+r;accnt2=tmp2-r;counter++;} while (accnt1+accnt2==0&&counter<1000000); end=GetTickCount();time=end-begin;printf("进?程¨?%d所¨′用??时o?à间?为a%lf\n",a,time); a++;//ReleaseMutex(hMutex);counter=0;return 0;}int main(int argc, char *argv[]){CreateThread(NULL,0,run,NULL,0,NULL); CreateThread(NULL,0,run,NULL,0,NULL);system("PAUSE");return 0;}执行结果如下:从运行结果可以看出,每次进程2都可以全部完成,完成一次计数所需要的时间为62ms,而进城1无法全部完成,所用时间不一定。
东北大学操作系统实验报告

{
public:
char name;
string status;
};
vector<Pro> ru,re,bl; //ru->running,re->ready,bl->blocked
//function declaration
int helloUI();
re.push_back(process);
else if(sta == "b")
bl.push_back(process);
else
cout << "Error!!" << endl;
cout << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
cout << endl;
}
else
cout << "Error in ruTObl2." << endl;
showPCB();
return 0;
}
int blTOre()
{
if(!bl.empty()) //blockedQueue is not empty.
{
re.push_back(bl.front());
bl.erase(bl.begin());
{
int act; //choose action
helloUI();
cout << "Please initialize the process." << endl;
操作系统安全实验1实验报告

操作系统安全实验1一、实验目的1. 了解Windows的文件系统2. 掌握Windows操作系统的访问控制和审核技术3. 掌握系统安全配置和安全分析方法4.理解Windows平台下的漏洞扫描原理5. 掌握系统备份与恢复方法二、实验环境PC机,Windows XP操作系统,X-Scan v3.3,Ghost软件一套三、实验内容1. 系统安全配置与分析2. 管理用户帐户3. 授权管理4.设置审核策略5. 使用X-Scan对系统进行安全扫描6. 系统的网络服务管理7. 系统备份与恢复四、实验步骤与结果分析1、系统安全配置与分析(1)修改密码策略首先在“控制面板”中选择“管理工具”——“本地安全设置”——“帐户策略”——“密码策略”如下所示:双击“密码必须符合复杂性要求”或者右击它选择属性,启用该策略,如下所示:双击“密码长度最小值”,设置最短密码长度为8个字符,如下所示:设置“密码最短存留期”,确定用户在可以更改密码之前必须使用该密码的天数,设置为7天。
如下所示:设置“密码最长存留期”,确定系统在要求用户更改密码之前可以使用该密码的天数,设置为30天。
设置“强制密码历史”,防止用户重新使用旧密码,设置为3。
如下所示:设置完成后退出“本地安全设置”,在“运行”中输入命令:gpupdate,系统将刷新刚才修改的安全策略。
选择一个普通用户,为该用户重设口令,体会密码加强策略的作用,起初用户名设为love,密码设为520。
如下所示:结合密码复杂性设置原则(大写字母+小写字母+数字)再将密码修改为abc19881211,结果创建成功。
(2)设置帐户锁定策略对帐户锁定策略进行设置,值为2,然后重新登录系统,使用用户zhengjiaen口令登录系统,体会帐户锁定的作用。
如下所示:(4)系统安全策略分析在“运行”中输入MMC,打开控制台界面。
单击“文件”——“添加/删除管理单元”——“添加”,选择“安全配置和分析”并添加,如下所示:右击“安全配置与分析”,选择“打开数据库”,可以通过输入数据库名称1,并选择一个安全模板创建一个新的安全策略数据库,利用这个数据库可以分析当前计算机的安全配置与安全策略模板的差异,如下所示:利用安全策略模板对当前计算机进行配置。
操作系统第一次实验报告

操作系统实验报告实验名称:线程控制实验计算机科学与技术学院目录一、实验目的和要求 (2)二、实验内容 (2)三、实验步骤 (2)四、实验结果与分析 (3)1.单线程 (3)2.单线程(睡眠4s) (3)3.多线程 (4)4.多线程(每个子线程睡眠1s) (4)5.单线程与多线程对比 (5)五、程序源代码 (5)1.单线程实验代码 (5)2.单线程实验代码 (6)六、实验体会 (7)一、实验目的和要求通过本实验掌握在Linux操作系统中遵循Posix线程标准接口进行多线程程序编程,熟练掌握线程的创建pthread_create(),线程的终止pthread_exit(),等待线程合并pthread_join()等线程控制操作,利用信号量或者互斥锁实现线程建的同步。
二、实验内容问题:求1000000个浮点数(精确到小数点后4位)的平均值(和,最大值,最小值),具体的问题描述流程图如下图图1所示:三、实验步骤1、随机生成1000000个浮点数;2、创建4个子线程,分别求250000个浮点数之和;3、完成1000000个浮点数之和并打印结果;4、统计多线程并发执行完成计算的时间;5、写一个单线程程序,同样完成1000000个随机数求和的计算,统计计算时间,并和前面结果进行对比;6、让单线程程序睡眠四秒钟、多线程程序各子程序睡一秒的条件下(两个程序总的睡眠时间相同),对比执行结果;7、分析两次对比结果的差异,写出自己的见解。
四、实验结果与分析1、单线程完成1000000个浮点数的求和运算所用的时间情况如下图图2所示:图2 单线程计算时间分析:实验中每次随机产生一个0到1之间的浮点数,1000000个这样的数相加的话的平总和大概就在500000左右(按照随机数的平均值原理),实验中sum=,显然结果正确,整个计算运行时间为。
2、单线程完成1000000个浮点数的求和运算,单线程中睡眠4秒钟,所用的时间情况如下图图3所示:图3 单线程计算时间(睡眠4秒)分析:根据上一次单线程的执行情况来看,这一次让单线程睡眠4秒钟,最后执行时间刚好就是4秒加上计算时间。
操作系统实验报告1

《操作系统》实验报告实验序号:01 实验项目名称:操作系统环境学号1107xxx 姓名xxx 专业、班级软件工程1103 实验地点计—502 指导教师徐冬时间2013.9.23 实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;由此,进一步熟悉Windows操作系统的应用环境。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows 操作系统的计算机。
实验内容与步骤1. 计算机管理2. 事件查看器3. 性能监视4. 服务5. 数据库 (ODBC)为了帮助用户管理和监视系统,Windows提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
如图2所示。
图2 基于虚拟机的操作系统计算环境管理步骤1:登录进入Windows。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) Internet 信息服务;管理IIS,Internet 和Intranet站点的WEB服务器。
2) Server Extensions 管理器;Server Extensions管理器。
3)计算机管理;管理磁盘以及使用其他系统工具来管理本地或远程的计算机。
4)性能;显示系统性能图表以及配置数据日志和警报。
5)本地安全策略;查看和修改本地安全策略,如用户权限和审核策略。
6)事件查看器;显示来自于Windows和其他程序的监视与排错消息。
7)组件服务;配置和管理COM+应用程序。
1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
步骤3:在“管理工具”窗口中,双击“计算机管理”图标。
“计算机管理”使用的窗口与“Windows资源管理器”相似。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1:熟悉Linux系统一、题目:熟悉Linux系统二、目的:熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。
1、启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…2、C语言编辑、编译三、内容及要求:1、熟练掌握Linux基本文件命令;2、掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;3、认真做好预习,书写预习报告;4、实验完成后要认真总结、完成实验报告。
四、内容及要求:在Linux环境下编制、调试源程序的实际过程(每一步的具体说明)。
实验2:进程状态一、题目:进程状态二、目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。
三、内容及要求1、设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序;2、独立设计、编写、调试程序;3、程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB 组织的变化。
4、进程的状态模型(三状态、五状态、七状态或其它)可自行选择,5、代码书写要规范,要适当地加入注释;6、鼓励在实验中加入新的观点或想法,并加以实现;7、认真进行预习,完成预习报告;8、实验完成后,要认真总结,完成实验报告。
四、程序流程图图4.1 进程转换流程五、使用的数据结构及其说明struct PCB //进程控制块PCB{char name; //名字标识string state; //状态int time; //执行时间};typedef struct PCB ElemType;struct QNode{ElemType data;struct QNode *next;}; //链式队列结点typedef struct QNode QNode; //结点typedef struct QNode *PNode;typedef struct{PNode frnt;PNode rear;} LinkQueue; //链式队列六、程序源代码、文档注释及文字说明#include <iostream>#include<stdlib.h>#include<fstream>#include<windows.h>using namespace std;struct PCB //进程控制块PCB{char name; //名字标识string state; //状态int time; //执行时间};typedef struct PCB ElemType;struct QNode{ElemType data;struct QNode *next;}; //链式队列结点typedef struct QNode QNode; //结点typedef struct QNode *PNode;typedef struct{PNode frnt;PNode rear;} LinkQueue; //链式队列void Insert_Queue(LinkQueue &Q,ElemType e) //插入{PNode ptr=(PNode)malloc(sizeof(QNode));if(!ptr){cout<<"(Insert_Queue)动态分配结点失败!\n";exit(1);}ptr->data=e;ptr->next=NULL;Q.rear->next=ptr;Q.rear=ptr;}int Init_Queue(LinkQueue &Q) //初始化{Q.frnt=Q.rear=(PNode)malloc(sizeof(QNode));if(!Q.frnt)exit(1);Q.frnt->next=NULL;return 0;}int Delete_Queue(LinkQueue &Q,ElemType &e) //删除(头结点删除法){PNode ptr;if(Q.frnt==Q.rear) //空队列return 1;ptr=Q.frnt->next; //删除第一个元素Q.frnt->next=ptr->next;e=ptr->data;if(Q.rear==ptr)Q.rear=Q.frnt;free(ptr);return 0;}int Empty_Queue(LinkQueue Q) //判断是否为空队列,是1,否0{return (Q.frnt==Q.rear?1:0);}void Print_Queue(LinkQueue &Q) //打印队列元素{PNode ptr;if(Q.frnt==Q.rear) //队列为空时,返回提示信息{cout<<"\t\tempty.\n";}else{ptr=Q.frnt->next;while(ptr!=NULL){cout<<"\t\tProcess's name : "<<ptr-><<endl;ptr=ptr->next;}}}void Print_State(LinkQueue &Q_Ready,LinkQueue &Q_Running,LinkQueue &Q_Blocked){cout<<"\t-----------------------------\n";cout<<"\n\tStatus_Ready:\n";Print_Queue(Q_Ready);cout<<"\n\tStatus_Running: \n";Print_Queue(Q_Running);cout<<"\n\tStatus_Blocked: \n";Print_Queue(Q_Blocked);cout<<"\n\t-----------------------------\n";}void Transision_Two(LinkQueue &Q1,LinkQueue &Q2){ElemType e;if(Empty_Queue(Q1)){cout<<"\nERROR! 前一个队列为空!.\n";return;}Delete_Queue(Q1,e);Insert_Queue(Q2,e);}int main(){int num;char choose;ElemType e;LinkQueue Q_Ready,Q_Running,Q_Blocked;Init_Queue(Q_Ready);Init_Queue(Q_Blocked);Init_Queue(Q_Running);cout<<"\t请输入进入Ready态的进程数目: ";cin>>num;cout<<endl;for(int i=1; i<=num; i++){cout<<"\t第"<<i<<"个进程----";cout<<"\n\t请输入进程名字: ";cin>>;cout<<"\t请输入进程状态: ";cin>>e.state;cout<<"\t请输入进程时间: ";cin>>e.time;Insert_Queue(Q_Ready,e);}cout<<"\t***********************************进程状态转换分割线************************************\n";cout<<"\tN=创建进程(New),D=调度(Dispatch),T=时间片到(Timeout),W=等待事件(Event Wait),";cout<<"\n\tC=事件发生(Event Occur),E=退出进程(Exit),P=输出各进程(Print),O=退出程序(Overgame)"<<endl;cout<<"\t请选择操作(N,D,T,W,C,E,P,O): ";cin>>choose;while(choose!='O'){switch(choose){case 'N'://N=创建进程(New){cout<<"\t请输入进入Ready态的进程数目: ";cin>>num;cout<<endl;for(int i=1; i<=num; i++){cout<<"\t第"<<i<<"个进程----";cout<<"\n\t请输入进程名字: ";cin>>;cout<<"\t请输入进程状态: ";cin>>e.state;cout<<"\t请输入进程时间: ";cin>>e.time;Insert_Queue(Q_Ready,e);}}Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'D'://D=调度(Dispatch)Transision_Two(Q_Ready,Q_Running);Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'T'://T=时间片到(Timeout)Transision_Two(Q_Running,Q_Ready);Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'W'://W=等待事件(Event Wait)Transision_Two(Q_Running,Q_Blocked);Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'C': //C=事件发生(Event Occur)Transision_Two(Q_Blocked,Q_Ready);Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'E': //E=退出进程(Exit)if(Empty_Queue(Q_Running)){cout<<"\n\tRelease Error! 没有正在执行的进程.\n";Print_State(Q_Ready,Q_Running,Q_Blocked);break;}Delete_Queue(Q_Running,e);Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'P'://P=输出各进程(Print)Print_State(Q_Ready,Q_Running,Q_Blocked);break;case 'O'://O=退出程序(Overgame)exit(1);default:cout<<"输出不符合规则,请重新输入!"<<endl; //操作异常处理break;}cout<<"\t***********************************进程状态转换分割线************************************\n";cout<<"\tN=创建进程(New),D=调度(Dispatch),T=时间片到(Timeout),W=等待事件(Event Wait),";cout<<"\n\tC=事件发生(Event Occur),E=退出进程(Exit),P=输出各进程(Print),O=退出程序(Overgame)"<<endl;cout<<"\t请选择操作(N,D,T,W,C,E,P,O): ";cin>>choose;}return 0;}七、运行结果及其说明运行结果如下截图所示,在截图中相继调用了"N=创建进程(New),D=调度(Dispatch),T=时间片到(Timeout),W=等待事件(Event Wait), C=事件发生(Event Occur),E=退出进程(Exit),P=输出各进程(Print),O=退出程序(Overgame)"命令。