操作系统上机实验三
操作系统实验,实验3, 进程管理 (1)
在图形界面上利用终端通过命令“su - ”切换到超级用户,编辑文件 “job”; 按组合键[Ctrl+Alt+F2]切换到第二个虚拟终端(超级用户); 输入命令“at –f job now+1 minute”,设置1分钟后执行at调度内容; 稍等后观察at调度的执行效果,再切换到第一个虚拟终端观察at调度 的执行效果;
切换到第一个虚拟终端观察at调度的执行效果(5分钟后系统将执行重 启调度任务)。
[操作要求2] 设置一个调度,要求1分钟后执行文件job中的作业。 文件job的内容为: find /home/jkx/ -name “*.c” > /home/jkx/fdresult wall user jkx, all code files have been searched out! Please check out. [操作步骤]
续表
守 护 进 程 innd Usenet新闻服务器 功 能 说 明
linuxconf
lpd named netfs network
允许使用本地WEB服务器作为用户接口来配置机器
打印服务器 DNS服务器 安装NFS、Samba和NetWare网络文件系统 激活已配置网络接口的脚本程序
nfsd
portmap postgresql routed sendmail
事件(例如xinetd和lpd)
启动守护进程有如下几种方法
在引导系统时启动 人工手动从shell提示符启动
系统启动script的执行期间 被启动(/etc/rc.d) 任何具有相应执行 权限的用户
使用crond守护进程启动
执行at命令启动
守护进程一般由系统在开机时通过脚本或root
操作系统实验指导书
《操作系统》课程实验指导书一.实验总学时(课外学时/课内学时):4/8 总学分:8/44必开实验个数: 4 选开实验个数:0二.适用专业:网络工程、计算机科学与技术2007级三.考核方式及办法:在规定实验时间内完成实验要求,依据实验过程及实验结果在实验现场逐一检查考核。
四.配套的实验教材或指导书:自编实验指导书五. 实验项目:实验1 SHELL命令的使用1、实验目的通过对LINUX的系统启动、注销、关闭和关机,帐号管理,文件系统的日常管理,文件系统的权限控制等常用基本命令的使用及与Windows下DOS SHELL的比较,了解现代操作系统SHELL的特点和功能。
了解编辑器vi的使用方法。
2、实验工具及环境LINUX系统网络环境或单机,Windows系统网络环境或单机。
3、实验计划学时2学时上机实际操作。
4、实验内容及操作步骤⑴系统启动和关闭①使用自己的账户登录UNIX系统,查看系统提示符确定自己使用的shell程序类型别。
◎开机后,系统自检启动后提示login:(输入:root↙)password:(输入:用户口令↙,root用户为redhat)◎查看/etc/passwd文件可以获得用户使用的shell#grep $LOGNAME /etc/passwd↙可能的显示为:user001:*:200:50::/usr/user001:/bin/sh请思考上述命令怎样得到了当前使用的shell类型的?使用下面的命令也可以查看当前shell:#echo $SHELL②注销和关机命令。
◎用户注销使用:$exit↙或$<ctrl>+<D>↙或$logout↙◎超级用户关机使用:#shutdown↙该命令将结束所有的进程,当执行此命令后系统提示“Safe to Power off or Press Any Keyto Reboot”时可以关闭电源或按任一键重启系统。
◎haltsys(halt),reboot只能由超级用户在单用户模式下使用。
操作系统实验3-进程控制
WORD wMajorReq=(WORD)(dwVerReq>16);
WORD wMinorReq=(WORD)(dwVerReq&0xffff);
::cout<<"Process ID:"<<dwIdThis<<",requires OS:"<<wMajorReq<<wMinorReq<<::endl;
{
//改变优先级
::SetPriorityClass(
::GetCurrentProcess(), //利用这一进程
HIGH_PRIORITY_CLASS); //改变为high
//报告给用户
::cout<<"Task Manager should indicate this "
"process is high priority."<<::endl;
//设置版本信息的数据结构,以便保存操作系统的版本信息
OSVERSIONINFOEX osvix;
::ZeroMemory(&osvix,sizeof(osvix));
osvix.dwOSVersionInfoSize=sizeof(osvix);
//提取版本信息和报告
::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));
Parent();
}
return 0;
}
分析:程序4-3.cpp说明了一个进程从“生”到“死”的整个一生,第一次执行时,它创建一个子进程,其行为如同“父亲”。在创建子进程之前,先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。当创建子进程时,就打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用ReleaseMutex()API发出“死亡”信号。然后用Sleep()API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。
操作系统 实验三 进程同步
集美大学计算机工程学院实验报告课程名称:操作系统指导教师:王丰实验成绩:实验编号:实验三实验名称:进程同步班级:计算12姓名:学号:上机实践日期:2015.5上机实践时间:2学时一、实验目的1、掌握用Linux信号灯集机制实现两个进程间的同步问题。
2、共享函数库的创建二、实验环境Ubuntu-VMware、Linux三、实验内容⏹需要的信号灯: System V信号灯实现☐用于控制司机是否可以启动车辆的的信号灯 S1=0☐用于控制售票员是否可以开门的信号灯 S2=0System V信号灯实现说明□ System V的信号灯机制属于信号灯集的形式, 一次可以申请多个信号灯.□同样利用ftok()生成一个key: semkey=ftok(path,45);□利用key申请一个包含有两个信号灯的信号灯集, 获得该集的idsemid=semget(semkey,2,IPC_CREAT | 0666);□定义一个联合的数据类型union semun{int val;struct semid_ds *buf;ushort *array;};□利用semctl()函数对信号灯初始化,参数有:信号灯集的id: semid要初始化的信号灯的编号:sn要设定的初始值:valvoid seminit(int semid, int val,int sn){union semun arg;arg.val=val;semctl(semid,sn,SETVAL,arg);}利用初始化函数,初始化信号灯:seminit(semid,0,0);//用来司机启动汽车的同步seminit(semid,0,1);//用来售票员开门的同步控制□利用semop()函数, 对信号灯实现V操作:sembuf是一个在头部文件中的预定义结构、semid—信号灯集id, sn—要操作的信号灯编号void semdown(int semid,int sn){/* define P operating*/struct sembuf op;op.sem_num=sn;op.sem_op=-1;//P操作为-1op.sem_flg=0;semop(semid,&op,1);}2、Linux的静态和共享函数库·Linux生成目标代码: gcc -c 源程序文件名(将生成一个与源程序同名的.o目标代码文件。
电大操作系统实验报告3_ 进程管理实验
电大操作系统实验报告3_ 进程管理实验电大操作系统实验报告 3 进程管理实验一、实验目的进程管理是操作系统的核心功能之一,本次实验的目的是通过实际操作和观察,深入理解进程的概念、状态转换、进程调度以及进程间的通信机制,掌握操作系统中进程管理的基本原理和方法,提高对操作系统的整体认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C 语言,开发工具为 Visual Studio 2019。
三、实验内容及步骤(一)进程的创建与终止1、编写一个 C 程序,使用系统调用创建一个子进程。
2、在父进程和子进程中分别输出各自的进程 ID 和父进程 ID。
3、子进程执行一段简单的计算任务,父进程等待子进程结束后输出结束信息。
以下是实现上述功能的 C 程序代码:```cinclude <stdioh>include <stdlibh>include <unistdh>int main(){pid_t pid;pid = fork();if (pid < 0) {printf("创建子进程失败\n");return 1;} else if (pid == 0) {printf("子进程:我的进程 ID 是%d,父进程 ID 是%d\n",getpid(), getppid());int result = 2 + 3;printf("子进程计算结果:2 + 3 =%d\n", result);exit(0);} else {printf("父进程:我的进程 ID 是%d,子进程 ID 是%d\n",getpid(), pid);wait(NULL);printf("子进程已结束\n");}return 0;}```编译并运行上述程序,可以观察到父进程和子进程的输出信息,验证了进程的创建和终止过程。
(二)进程的状态转换1、编写一个 C 程序,创建一个子进程,子进程进入睡眠状态一段时间,然后被唤醒并输出状态转换信息。
16207318邓嘉操作系统实验三
操作系统实验第三次实验进程同步实验指导老师:***学号:********姓名:***操作系统第三次实验进程同步实验指导老师:谭朋柳学生:16207318邓嘉4.1 实验目的加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。
了解Linux 系统中IPC 进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。
4.2 实验说明在linux 系统中可以利用进程间通信(interprocess communication )IPC 中的3 个对象:共享内存、信号灯数组、消息队列,来解决协作并发进程间的同步与互斥的问题。
1)共享内存是OS 内核为并发进程间交换数据而提供的一块内存区(段)。
如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映射到自己私有的地址空间中。
如果一进程更新了段中数据,那么其他进程立即会看到这一更新。
进程创建的段也可由另一进程读写。
linux 中可用命令ipcs -m 观察共享内存情况。
$ ipcs -m------ Shared Memory Segments --------key shmid owner perms bytes nattch status 0x00000000 327682 student 600 393216 2 dest0x00000000 360451 student 600 196608 2 dest 0x00000000 393220 student 600 196608 2 destkey 共享内存关键值shmid 共享内存标识owner 共享内存所由者(本例为student)perm 共享内存使用权限(本例为student 可读可写)byte 共享内存字节数nattch 共享内存使用计数status 共享内存状态上例说明系统当前已由student 建立了一些共享内存,每个都有两个进程在共享。
操作系统上机实验报告
操作系统上机实验报告实验一进程的建立1.实验目的学会通过基本的Windows进程控制函数,由父进程创建子进程,并实现父子进程协同工作。
2.实验软硬件环境Dev-C++3.实验内容创建两个进程,让子进程读取一个文件,父进程等待子进程读取完文件后继续执行,实现进程协同工作。
进程协同工作就是协调好两个进程,使之安排好先后次序并以此执行,可以用等待函数来实现这一点。
当需要等待子进程运行结束时,可在父进程中调用等待函数。
4.实验程序及分析实验程序源代码如下:父进程:#include<stdio.h>#include<windows.h>int main(){STARTUPINFO si;PROCESS_INFORMA TION pi; //当Windows创建新进程时,将使用这两个结构体的有关成员。
所以在创建子进程之前应该对结构体进行声明和初始化。
ZeroMemory(&pi,sizeof(pi));ZeroMemory(&si,sizeof(si));si.cb=sizeof(STARTUPINFO);if(CreateProcess("lab1.2.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL ,NULL,&si,&pi))//创建一个新进程,若是成功,就返回1,进而实现if选择{printf("子进程已创建~\n");int i,sum=0;for(i=1;i<=100;++i){sum+=i;printf("sum=%d\n",sum);} //进行1+2+3+….+100计算WaitForSingleObject(pi.hProcess,INFINITE); FILE *fp;fp=fopen("date.txt","r");char ch=fgetc(fp); //创建文件并打开while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp); //关闭文件}elseprintf("子进程创建失败~\n");return 0;}子进程:#include<stdio.h>#include<stdlib.h>int main(){printf("子进程运行~\n");FILE *fp;if(fp=fopen("date.txt","w")){printf("已经创建文件!\n");int i;for(i=48;i<58;i++) fputc(i,fp);fputc('\n',fp);fclose(fp);printf("已经写入数据:"); //向文本中写入数据fp=fopen("date.txt","r");char ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp); //输出数据}fclose(fp);}else printf("创建文件失败!\n");system("pause");return 0;}5. 实验截图说明及分析6. 实验心得体会掌握了父进程创建子进程的方法,对操作系统多线程认识更深了。
大学计算机基础习题与上机指导 实验三
上一页
下一页
二、实验要点象的操作 3. 学会使用Windows联机帮助系统
4. 美化Windows的桌面
上一页
下一页
鼠标的常用操作
(1) 单击左键 按下鼠标左键,然后松开,这就是单击左键。往往用于单个对象的选中或
取决于计算机中所安装的显示器适配器以及显示器的类型。显然,分辨率 越高,显示的图像就会越清晰。用下面的方法设置分辨率: 在Windows XP的桌面上单击鼠标右键,从弹出的快捷菜单中选择“属性” 命令,弹出“显示 属性”对话框,在其中选择“设置”选项卡,再拖动分 辨率滑块即可设置分辨率,同时,滑块底下将会显示出此时的分辨率大小, 如图3-3所示。
上一页
下一页
三、实验内容
1. 鼠标常用操作练习
2. 用鼠标选中文本 3. 使用帮助系统
4. 美化Windows的桌面
上一页
下一页
鼠标常用操作练习
(1) 双击桌面上的“我的电脑”图标,打开“我的电脑”窗口。如果没有,
单击“开始”菜单从列表中选取。 (2) 单击工具栏上的“文件夹”按钮,使该窗口的左边窗格按照目录树排列。 (3) 用鼠标在左窗格中单击某个盘符如D:盘,单击鼠标右键,弹出快捷菜 单。 (4) 在该快捷菜单中选中“属性”命令,并单击打开磁盘“属性”对话框。 (5) 在该对话框中观察当前磁盘的已用空间、剩余空间以及本磁盘的磁盘分 区格式。
上一页
下一页
设置屏幕保护
当用户在一定的时间内没有操作计算机,系统会自动执行一个屏幕动画程
序。屏幕保护程序有许多实际用处,如用户可以对暂时不用的计算机设置 屏蔽,可以防止他人查看用户屏幕上的信息。此外,还可设置监视器的节 能特性。 设置了屏幕保护程序之后,一旦用户在设定的时间内没有操作计算机,系 统就会自动启动屏幕保护程序。如果没有设置密码保护功能,用户只要移 动一下鼠标或是按下任意键就会恢复原来的屏幕状态;如果设置了密码保 护功能,用户移动鼠标时,系统要询问密码以防止他人非法进入。
计算机操作系统实验课实验报告
计算机操作系统实验课实验报告实验报告实验课程:计算机操作系统学生姓名:XXX学号:XXXX专业班级:软件2022年年12月月25日目录实验一熟悉PWindowsXP中的进程与线程..1实验二进程调度............................................4实验三死锁避免—银行家算法的实现......13实验四存储管理..........................................19实验一熟悉PWindowsXP中的进程与线程一、实验名称熟悉WindowsXP中的进程与线程二、实验目的1、熟悉Windows中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程与线程的相关信息。
3、掌握利用spy++、exe来察瞧Windows中各个任务的更详细信息。
三、实验结果分析1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者就是在点击任务条上的“开始”“运行”,并输入“taskmgr、exe”。
2、调整任务管理器的“查瞧”中的相关设置,显示关于进程的以下各项信息,并完成下表:表一:统计进程的各项主要信息序号进程名称进程ID 线程数量占用内存优先级占CPU时间虚拟内存1Bddownloader、exe7312329980k标准0:00:009200k2Taskmgr、exe722834124k高0:00:043372k3BaiDuSdTray、exe5144308588k标准0:00:1543652k 任务管理器无法结束进程,原因就是该系统就是系统进程。
4、在任务管理器中找到进程“explorer、exe”,将之结束掉,并将桌面上您打开的所有窗口最小化,瞧瞧您的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论explorer、exe就是管理桌面图标的文件(说出explorer、exe进程的作用)。
5、运行“spy++、exe”应用软件,点击按钮“”,切换到进程显示栏上,查瞧进程“explorer、exe”的各项信息,并填写下表:进程:explorer、exe中的各个线程序号进程ID线程ID基本优先级当前优先级CPU时间上下文开关1000016B88100:00:0649983362000016B8000003EC15150:00:0083000016B88100:00:00114000016B800000A0C8100:00:00135000016B8880:00:078171386000016B8000013D88100:00:0023266、注意某些线程前有“+”,如图所示:,说明二者之间的差异前有“+”其器线程下有窗口。
C++上机实验报告 实验三
实验三类与对象1.实验目的1.掌握类的定义和使用2.掌握类的定义和对象的声明3.复习具有不同访问属性的成员的访问方式4.观察构造函数和析构函数的执行过程5.学习类的组合使用方法6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
2.实验要求1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中,rank为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。
观察构造函数和析构函数的调用顺序。
2.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。
cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。
3. (选做)设计一个用于人事管理的People(人员)类。
考虑到通用性这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。
其中“出生日期”定义为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。
3.实验内容1.首先定义枚举类型CPU_Rank,例如enum CPU_Rank{P1=1, P2, P3, P4, P5, P6, P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。
在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。
计算机基础上机实验精华版三
实验三Windows系统设置及应用程序一、实验目的:1、掌握对任务栏的基本操作2、了解窗口各部分的名称,能够熟练掌握窗口的各种基本操作3、了解对桌面的部分基本操作4、掌握控制面板中的一些常用设置二、实验设备和软件:硬件:计算机并配置软盘驱动器。
软件:WindowsXP操作系统三、实验预备知识:桌面:是指登录到Windows系统后展现的整个屏幕界面,是用户利用计算机进行各种操作、运行各种程序以及完成各项任务的工作平台。
桌面上的【开始】按钮是运行Windows应用程序的入口,是执行程序常用的方式。
Windows的主要功能都可以通过执行“开始”菜单提供的各项命令来实现。
任务栏:通常位于桌面的下方,它既可以作为任务切换器,又是状态栏。
当运行程序时,在任务栏上都会出现一个相应的按钮,通过单击任务栏上相对应的按钮可以切换到某个程序或文件夹窗口。
任务栏的右边是多个状态指示器,通常有语言指示器、时间指示器、音量指示器等。
双击状态指示器会显示出该指示器的相关信息。
任务栏中“开始”按钮的右边有“快速启动”工具栏,其中包括“显示桌面”、“启动Internet Explorer浏览器”、“Windows Media Player”等按钮。
要将当前桌面上打开的所有窗口最小化可以单击“显示桌面”按钮来实现。
控制面板:是Windows中的一个重要的系统文件夹,其中包含许多独立的程序项,可以用来对设备进行设置和管理、调整系统的环境参数和各种属性、添加新的硬件和软件,使得用户可以按照自己的要求对系统进行一些设置,如系统时间、桌面墙纸、屏幕保护程序、电源管理、键盘和鼠标的速度、输入法热键、添加用户和设置密码、安装打印机等。
在“开始”菜单中选择“控制面板”项,即可打开“控制面板”窗口。
在窗口中双击任意一个对象,即可打开相应的对话框或窗口,对其有关属性进行设置。
Windows应用程序:如画图、计算器、写字板、记事本、CD唱机等。
用户可以使用这些应用程序来满足一些基本应用需求。
操作系统实验报告三
操作系统实验报告三一、实验目的本次操作系统实验的目的在于深入了解操作系统的进程管理、内存管理和文件系统等核心功能,通过实际操作和观察,增强对操作系统原理的理解和掌握,提高解决实际问题的能力。
二、实验环境本次实验在 Windows 10 操作系统环境下进行,使用了 Visual Studio 2019 作为编程工具,并借助了相关的操作系统模拟软件和调试工具。
三、实验内容与步骤(一)进程管理实验1、创建多个进程使用 C++语言编写程序,通过调用系统函数创建多个进程。
观察每个进程的运行状态和资源占用情况。
2、进程同步与互斥设计一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。
分析在不同并发情况下程序的执行结果,理解进程同步的重要性。
(二)内存管理实验1、内存分配与回收实现一个简单的内存分配算法,如首次适应算法、最佳适应算法或最坏适应算法。
模拟内存的分配和回收过程,观察内存的使用情况和碎片产生的情况。
2、虚拟内存管理了解 Windows 操作系统的虚拟内存机制,通过查看系统性能监视器观察虚拟内存的使用情况。
编写程序来模拟虚拟内存的页面置换算法,如先进先出(FIFO)算法、最近最少使用(LRU)算法等。
(三)文件系统实验1、文件操作使用 C++语言对文件进行创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件目录的结构。
2、文件系统性能测试对不同大小和类型的文件进行读写操作,测量文件系统的读写性能。
分析影响文件系统性能的因素,如磁盘碎片、缓存机制等。
四、实验结果与分析(一)进程管理实验结果1、创建多个进程在创建多个进程的实验中,通过任务管理器可以观察到每个进程都有独立的进程 ID、CPU 使用率、内存占用等信息。
多个进程可以并发执行,提高了系统的资源利用率。
2、进程同步与互斥在生产者消费者问题的实验中,当使用正确的信号量机制时,生产者和消费者能够协调工作,不会出现数据不一致或死锁的情况。
操作系统上机实验报告
操作系统上机实验报告计算机科学与技术学院操作系统上机实验报告实验名称:进程和线程实验⽬的:理解unix/Linux下进程和线程的创建、并发执⾏过程。
实验内容:1.进程的创建2.多线程应⽤实验步骤:⼀、进程的创建下⾯这个C程序展⽰了UNIX系统中⽗进程创建⼦进程及各⾃分开活动的情况。
1、实验指导fork( )创建⼀个新进程。
系统调⽤格式:pid=fork( )参数定义:int fork( )fork( )返回值意义如下:0:在⼦进程中,pid变量保存的fork( )返回值为0,表⽰当前进程是⼦进程。
>0:在⽗进程中,pid变量保存的fork( )返回值为⼦进程的id值(进程唯⼀标识符)。
-1:创建失败。
如果fork( )调⽤成功,它向⽗进程返回⼦进程的PID,并向⼦进程返回0,即fork( )被调⽤了⼀次,但返回了两次。
此时OS在内存中建⽴⼀个新进程,所建的新进程是调⽤fork( )⽗进程(parent process)的副本,称为⼦进程(child process)。
⼦进程继承了⽗进程的许多特性,并具有与⽗进程完全相同的⽤户级上下⽂。
⽗进程与⼦进程并发执⾏。
2、参考程序代码/*process.c*/#include#includemain(int argc,char *argv[]){int pid;/* fork another process */pid = fork();if (pid < 0) { /* error occurred */fprintf(stderr, "Fork Failed");exit(-1);}else if (pid == 0) { /* child process */ execlp( "/bin/ls", "ls",NULL);}else {/* parent process *//* parent will wait for the child to complete */ wait(NULL);printf( "Child Complete" );exit(0);}}3、编译和运⾏$gcc process.c –o processs4、运⾏$./process5、思考(1)系统是怎样创建进程的?⽤fork()系统调⽤创建。
操作系统安全实验3实验报告
操作系统安全实验3实验报告实验三:操作系统安全实验报告一、实验目的1.了解操作系统的安全机制;2.学习使用常见的安全技术和工具。
二、实验环境1. 操作系统:Windows 10;2. 编程语言:Python。
三、实验内容本次实验分为两个实验项目,分别是文件加密和进程权限控制。
1.文件加密文件加密是一种常见的安全技术,通过对目标文件进行加密,可以保护文件的内容不被未授权的用户访问。
本次实验要求编写一个文件加密程序,实现以下功能:(1)接受用户输入的文件路径和密钥;(2)对目标文件使用密钥进行加密,生成加密文件;(3)对加密文件使用相同的密钥进行解密,还原为原始文件。
2.进程权限控制进程权限控制是操作系统的一个重要安全机制,通过限制进程的权限,可以防止恶意程序对系统进行破坏。
本次实验要求编写一个进程权限控制程序,实现以下功能:(1)列出当前系统中所有的进程,并显示其ID和权限;(2)接受用户输入的进程ID和新的权限;(3)修改目标进程的权限为用户指定的权限。
四、实验步骤及结果1.文件加密(1)根据实验要求,编写一个文件加密程序,使用Python语言实现,并命名为encrypt.py。
(2)运行encrypt.py,输入要加密的文件路径和密钥。
(3)程序将对目标文件进行加密,并生成加密文件。
(4)运行encrypt.py,输入要解密的文件路径和密钥。
(5)程序将对加密文件进行解密,并还原为原始文件。
2.进程权限控制(1)根据实验要求,编写一个进程权限控制程序,使用Python语言实现,并命名为process_control.py。
(2)运行process_control.py,程序将列出当前系统中所有的进程,并显示其ID和权限。
(3)输入要修改权限的进程ID和新的权限。
(4)程序将修改目标进程的权限为用户指定的权限。
五、实验总结通过本次实验,我深入了解了操作系统的安全机制,并学习了使用常见的安全技术和工具。
操作系统实验三
实验三进程调度实验目的1、理解有关进程控制块、进程队列的概念。
2、掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。
实验内容与基本要求1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。
2、建立进程就绪队列。
3、编制两种进程调度算法:优先权调度算法P和时间片轮转调度算法R。
实验报告内容1、优先权调度算法和时间片轮转调度算法原理。
2、程序流程图。
3、程序及注释。
4、运行结果以及结论。
1、优先权调度算法和时间片轮转调度算法原理优先权调度算法:当该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行;当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程投入运行。
分为非抢占式优先级算法和抢占式优先级算法。
时间片轮转调度算法原理:系统将就绪进程按到达的顺序排成一个队列,按FCFS原则,进程调度程序总是选择就绪队列中的第一个进程执行,且只运行一个时间片。
时间用完后,即使此进程并未完成,仍然将处理机分配给下一个就绪的进程,将此进程返回到就绪队列的末尾,等候重新运行。
2、程序流程图。
3、程序及注释#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{char name[20]; /*进程的名字*/int prio; /*进程的优先级*/int round; /*分配CPU的时间片*/int cputime; /*CPU执行时间*/int needtime; /*进程执行所需要的时间*/char state; /*进程的状态,W--就绪态,R--执行态,F--完成态*/int count; /*记录执行的次数*/struct node *next; /*链表指针*/}PCB;PCB *ready=NULL,*run=NULL,*finish=NULL; /*定义三个队列,就绪队列,执行队列和完成队列*/int num;void GetFirst(); /*从就绪队列取得第一个节点*/void Output(); /*输出队列信息*/void InsertPrio(PCB *in); /*创建优先级队列,规定优先数越小,优先级越高*/void InsertTime(PCB *in); /*时间片队列*/void InsertFinish(PCB *in); /*时间片队列*/void PrioCreate(); /*优先级输入函数*/void TimeCreate(); /*时间片输入函数*/void Priority(); /*按照优先级调度*/void RoundRun(); /*时间片轮转调度*/int main(void){char chose;printf("请输入要创建的进程数目:\n");scanf("%d",&num);getchar();printf("输入进程的调度方法:(P/R)\n");scanf("%c",&chose);switch(chose){case 'P':case 'p':PrioCreate();Priority();break;case 'R':case 'r':TimeCreate();RoundRun();break;default:break;}Output();return 0;}void GetFirst() /*取得第一个就绪队列节点*/{run = ready;if(ready!=NULL){run ->state = 'R';ready = ready ->next;run ->next = NULL;}}void Output() /*输出队列信息*/{PCB *p;/*p = ready;*/printf("进程名\t优先级\t时间片\tcpu时间\t需要时间\t进程状态\t计数器\n");p = ready;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime, p->state,p->count);p = p->next;}p = finish;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime, p->state,p->count);p = p->next;}p = run;while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round,p->cputime,p->needtime, p->state,p->count);p = p->next;}}void InsertPrio(PCB *in) /*创建优先级队列,规定优先数越小,优先级越低*/{PCB *fst,*nxt;fst = nxt = ready;if(ready == NULL) /*如果队列为空,则为第一个元素*/{in->next = ready;ready = in;}else /*查到合适的位置进行插入*/{if(in ->prio > fst ->prio) /*比第一个还要大(大于等于),则插入到队头*/{in->next = ready;ready = in;}else{while(fst->next != NULL) /*移动指针查找第一个别它小的元素的位置进行插入*/{nxt = fst;fst = fst->next;}if(fst ->next == NULL) /*已经搜索到队尾,则其优先级数最小,将其插入到队尾即可*/{in ->next = fst ->next;fst ->next = in;}else /*插入到队列中*/{nxt = in;in ->next = fst;}}}}void InsertTime(PCB *in) /*将进程插入到就绪队列尾部*/ {PCB *fst;fst = ready;if(ready == NULL){in->next = ready;ready = in;}else{while(fst->next != NULL){fst = fst->next;}in ->next = fst ->next;fst ->next = in;}}void InsertFinish(PCB *in) /*将进程插入到完成队列尾部*/ {PCB *fst;fst = finish;if(finish == NULL){in->next = finish;finish = in;}else{while(fst->next != NULL){fst = fst->next;}in ->next = fst ->next;fst ->next = in;}}void PrioCreate() /*优先级调度输入函数*/{PCB *tmp;printf("输入进程名字和进程所需时间:\n");for(i = 0;i < num; i++){if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL){perror("malloc");exit(1);}scanf("%s",tmp->name);getchar(); /*吸收回车符号*/scanf("%d",&(tmp->needtime));tmp ->cputime = 0;tmp ->state ='W';tmp ->prio = 50 - tmp->needtime; /*设置其优先级,需要的时间越多,优先级越低*/tmp ->round = 0;tmp ->count = 0;InsertPrio(tmp); /*按照优先级从高到低,插入到就绪队列*/}}void TimeCreate() /*时间片输入函数*/{PCB *tmp;int i;printf("输入进程名字和进程时间片所需时间:\n");for(i = 0;i < num; i++){if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL){perror("malloc");exit(1);}scanf("%s",tmp->name);getchar();scanf("%d",&(tmp->needtime));tmp ->cputime = 0;tmp ->state ='W';tmp ->prio = 0;tmp ->round = 2; /*假设每个进程所分配的时间片是2*/tmp ->count = 0;InsertTime(tmp);}void Priority() /*按照优先级调度,每次执行一个时间片*/{int flag = 1;GetFirst();while(run != NULL) /*当就绪队列不为空时,则调度进程如执行队列执行*/{Output(); /*输出每次调度过程中各个节点的状态*/while(flag){run->prio -= 0; /*优先级减去三,若设为0则优先级不变*/run->cputime++; /*CPU时间片加一*/run->needtime--;/*进程执行完成的剩余时间减一*/if(run->needtime == 0)/*如果进程执行完毕,将进程状态置为F,将其插入到完成队列*/{run ->state = 'F';run->count++; /*进程执行的次数加一*/InsertFinish(run);flag = 0;}else /*将进程状态置为W,入就绪队列*/{run->state = 'W';run->count++; /*进程执行的次数加一*/InsertTime(run);flag = 0;}}flag = 1;GetFirst(); /*继续取就绪队列队头进程进入执行队列*/}}void RoundRun() /*时间片轮转调度算法*/{int flag = 1;GetFirst();while(run != NULL){Output();while(flag){run->count++;run->cputime++;run->needtime--;if(run->needtime == 0) /*进程执行完毕*/{run ->state = 'F';InsertFinish(run);flag = 0;}else if(run->count == run->round)/*时间片用完*/{run->state = 'W';run->count = 0; /*计数器清零,为下次做准备*/InsertTime(run);flag = 0;}}flag = 1;GetFirst();}}4、运行结果以及结论。
操作系统实验报告
技术资料常州大学操作系统课程实验报告姓名 xxx专业班级计算机科学与技术学号 xxxxxx指导老师 xxx成绩实验时间2012年4月23日——2012年5月7日实验一 Windows XP 系统管理一实验目的1) 了解和学习Windows系统管理工具及其使用;2) 熟悉Windows系统工具的内容和应用;3)熟悉Windows操作系统的应用环境。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的“管理工具”中集成了许多系统管理工具,利用这些工具,管理员可以方便地实现各种系统维护和管理功能。
这些工具都集中在“控制面板”的“管理工具”选项下,用户和管理员可以很容易地对它们操作和使用。
在默认情况下,只有一些常用工具——如服务、计算机管理、事件查看器、数据源 (ODBC) 、性能和组件服务等——随Windows XP 系统的安装而安装。
四实验内容与步骤为了帮助用户管理和监视系统,Windows XP提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
步骤1:登录进入Windows XP。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1) 本地安全策略:查看和修改本地安全策略,如用户权限和审核策略2) Internet信息服务:管理 IIS,Internet 和 Intranet 站点的 WEB服务器3) 服务:启动和停止服务4)计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程的计算机5)事件查看器:显示来自于 Windows 和其他程序的监视与排错消息6)数据源ODBC:添加、删除、以及配置 ODBC 数据源和驱动程序7)性能:显示系统性能图表以及配置数据日志和警报8)组件服务:配置和管理 COM+ 应用程序1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows XP管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
操作系统实验报告实验3_1
操作系统实验报告实验3_1一、实验目的本次实验的主要目的是深入理解操作系统中进程管理的相关概念和原理,通过实际操作和观察,掌握进程的创建、调度、同步与互斥等关键机制,提高对操作系统内核工作原理的认知和实践能力。
二、实验环境本次实验在装有 Windows 10 操作系统的计算机上进行,使用了Visual Studio 2019 作为开发工具,编程语言为 C++。
三、实验内容与步骤(一)进程创建1、编写一个简单的 C++程序,使用系统调用创建一个新的进程。
2、在父进程和子进程中分别输出不同的信息,以区分它们的执行逻辑。
```cppinclude <iostream>include <windowsh>int main(){DWORD pid;HANDLE hProcess = CreateProcess(NULL, "childexe", NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pid);if (hProcess!= NULL) {std::cout <<"Parent process: Created child process with PID "<< pid << std::endl;WaitForSingleObject(hProcess, INFINITE);CloseHandle(hProcess);} else {std::cerr <<"Failed to create child process" << std::endl;return 1;}return 0;}```(二)进程调度1、设计一个多进程并发执行的程序,通过设置不同的优先级,观察操作系统对进程的调度情况。
2、记录每个进程的执行时间和等待时间,分析调度算法的效果。
```cppinclude <iostream>include <windowsh>DWORD WINAPI ProcessFunction(LPVOID lpParam) {int priority =(int)lpParam;DWORD start = GetTickCount();std::cout <<"Process with priority "<< priority <<"started" << std::endl;for (int i = 0; i < 100000000; i++){//执行一些计算操作}DWORD end = GetTickCount();DWORD executionTime = end start;std::cout <<"Process with priority "<< priority <<" ended Execution time: "<< executionTime <<" ms" << std::endl;return 0;}int main(){HANDLE hThread1, hThread2;int priority1 = 1, priority2 = 2;hThread1 = CreateThread(NULL, 0, ProcessFunction, &priority1, 0, NULL);hThread2 = CreateThread(NULL, 0, ProcessFunction, &priority2, 0, NULL);if (hThread1!= NULL && hThread2!= NULL) {SetThreadPriority(hThread1, THREAD_PRIORITY_LOWEST);SetThreadPriority(hThread2, THREAD_PRIORITY_NORMAL);WaitForSingleObject(hThread1, INFINITE);WaitForSingleObject(hThread2, INFINITE);CloseHandle(hThread1);CloseHandle(hThread2);} else {std::cerr <<"Failed to create threads" << std::endl;return 1;}return 0;}```(三)进程同步与互斥1、实现一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。
操作系统上机实验报告
5.在主菜单里选择系统工具选择系统监视器来监视系统性能。
评语:
日期:年月日
实验五:vi的基本操作
实验目的:
1.熟悉并掌握vi命令模式、文本编辑模式和最后行模式三种工作模式之间的转换方法。
2.掌握利用vi新建和保存文件;熟悉光标的移动,文本的插入与删除等操作。
3.掌握字符串替换;行的复制、移动、撤消和删除等操作。
2.打开f2文件并显示行号。
3.在f2文件的第一行后插入如下一行内容:“With the development of
4.将文本中所有的“eyeballs”用“eye-balls”替换。
5.把第二行移动到文件的最后,删除第一和第二行并恢复删除,并不保存
6.复制第二行,并添加到文件的最后,删除第二行,保存修改后退出vi。
实验内容:
1.利用vi新建文件f2,内容为:
How to Read Faster
When I was a schoolboy I must have read every comic book ever published. But as I got older, my eyeballs must have slowed down or something I mean, comic books started to pile up faster then I could read them!
14.重复上一步操作。
15.查看刚执行过的5个命令。
实验步骤:
1.先安装VMwareWorkstation。安装后,双击图标弹出界面,在界面上单击新建虚拟机,新建一个Linux的虚拟机,按界面提示一步一步完成操作。注意:(安装过程ISO镜像操作的使用)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:操作系统上机实验三
实验者:___代国威___ 班级:__计科1704 __ 学号:____1905019003____
1.实验简介
实验项目名称: 模拟实现银行家算法实现死锁避免
实验日期: 2020/5/26 场地: 家采用的软硬件环: VM+ Ubuntu+Win10
2.实验目的:
在熟练掌握死锁发生原理和解决死锁问题的基础上,利用一种程序设计语言模拟实现利用银行家算法实现死锁避免,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。
3.编写程序
实验步骤
模拟实现银行家算法以避免死锁的出现。
建立相应的数据结构(系统中每类资源的总量,进程对各类资源的最大需求量矩阵,资源已分配情况矩阵)根据用户的输入信息,完成数据的初始化,随机输入用户的资源需求申请,调用安全性算法得出此次资源申请是否安全的结论,若安全,输出安全序列,否则,不予分配
4.实验结果及分析
实现效果:\
5.结论
要想实现该程序,首先必须要掌握Dijkstra银行家算法的详细理念,要能根据用户的输入信息,完成数据初始化,根据用户的随机资源需求申请,调用安全性算法得出此次资源申请是否安全,再进行相应决策。
通过这次实验,我更进一步掌握了安全序列的定义和意义,并且能够深刻掌握动态分配资源的过程中相应系统安全状态下应当做出的动作,模拟实现银行家算法以避免死锁的出现。
虽然编程序中途遇到了一些问题,不过我查阅相关资料成功得以解决。