东北大学操作系统实验报告完整版

合集下载

东北大学linux实验报告

东北大学linux实验报告

东北大学linux实验报告东北大学Linux实验报告引言:在当今信息技术高速发展的时代,计算机科学与技术已经成为了各个领域不可或缺的一部分。

作为计算机领域的重要组成部分,操作系统在实际应用中起着至关重要的作用。

Linux作为一种开源的操作系统,具有稳定性、安全性和灵活性等优势,因此在学术界和工业界均得到了广泛的应用和研究。

本文将对东北大学Linux实验进行总结和分析,以期对Linux操作系统有更深入的了解。

一、实验背景东北大学开设的Linux实验课程旨在帮助学生掌握Linux操作系统的基本原理和应用技巧。

通过实验,学生能够了解Linux的启动过程、文件系统管理、用户权限管理、网络配置等关键概念和操作。

实验采用了虚拟机技术,使得学生可以在实验室或家中的个人电脑上进行实验,提高了实验的灵活性和便捷性。

二、实验内容1. Linux的安装与启动在本实验中,我们首先需要在虚拟机中安装Linux操作系统。

通过选择适当的Linux发行版和版本,进行分区、格式化、安装等步骤,最终完成Linux的安装。

安装完成后,我们需要了解Linux的启动过程,包括BIOS、MBR、GRUB等关键环节。

2. 文件系统管理Linux操作系统以文件为中心,因此文件系统管理是Linux实验的重要内容之一。

通过实验,我们学会了使用命令行和图形界面两种方式来管理文件和目录,包括创建、删除、复制、移动、重命名等操作。

此外,还学习了文件权限和所有权的概念,掌握了chmod、chown等命令的使用方法。

3. 用户权限管理在Linux系统中,用户权限管理是非常重要的一部分。

通过实验,我们学会了创建用户、设置密码、分配权限等操作。

同时,还了解了Linux的用户组概念,学习了添加用户到用户组、设置用户组权限等操作。

4. 网络配置网络配置是Linux实验中的另一个重要内容。

通过实验,我们了解了网络接口的配置和管理,包括IP地址、子网掩码、网关等参数的设置。

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

(完整word版)操作系统实验报告.实验一 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中可执行文件在核心态运行和用户态运行的时间。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统: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)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

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

东北大学操作系统实验报告
class Pro //process class
{
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;

j计算机操作系统实验报告1

j计算机操作系统实验报告1

计算机操作系统 计算机操作系统实验报告学 姓号: 名:2080121 2080121 王佰荣 2009-122009-12-14提交日期: 成 绩:东北大学秦皇岛分校实验报告【实验编号】 实验编号】1【实验名称】 实验名称】 Linux 安装实验 实验内容 1.熟练掌握 内容】 2.掌握虚拟机的使用 掌握虚拟机的使用。

【实验内容】1.熟练掌握 Linux 系统的安装 2.掌握虚拟机的使用。

实验步骤 步骤】 【实验步骤】 一.虚拟机的使用 <1>.新建虚拟机 <1>.新建虚拟机 Vmware,单击菜单“file—new— machine” 1. 打开 Vmware,单击菜单“file—new—virtual machine”,开始创建虚拟机 虚拟机提供两种安装方式“Typical” Custom” 选择“Typical” 2. 虚拟机提供两种安装方式“Typical”和“Custom”,选择“Typical” 选择需要安装的操作系统, Linux— 3. 选择需要安装的操作系统,选择 Linux—Red Hat Linux 4. 输入虚拟机名称和保存文件夹 选择网络连接方式,选择“ networking” 5. 选择网络连接方式,选择“Use bridged networking” 6. 设定虚拟机的硬盘容量为 3G <2>.调整虚拟机的参数 <2>.调整虚拟机的参数 单击出现的“ settings” 调整虚拟机的参数. 单击出现的“Edit virtual machine settings”,调整虚拟机的参数.单击 Memory”可以调整虚拟机的内存; “Memory”可以调整虚拟机的内存;单击 internet”可以调整网卡的工作 “internet” 模式;单击“cd-rom” 文件代替光盘, 模式;单击“cd-rom”可以设置虚拟机的光驱使用 ISO 文件代替光盘,单 add” remove”按钮可以添加、删除硬件。

东北大学操作系统实验三报告

东北大学操作系统实验三报告

东北大学操作系统实验三报告SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#操作系统实验报告班级物联网1302班学号姓名实验3 进程同步和通信-生产者和消费者问题模拟1. 目的:调试、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。

通过补充新功能,使学生能灵活运用相关知识,培养创新能力。

2. 内容及要求:1) 调试、运行模拟程序。

2) 发现并修改程序中不完善的地方。

3) 修改程序,使用随机数控制创建生产者和消费者的过程。

4) 在原来程序的基础上,加入缓冲区的写互斥控制功能,模拟多个进程存取一个公共缓冲区,当有进程正在写缓冲区时,其他要访问该缓冲区的进程必须等待,当有进程正在读取缓冲区时,其他要求读取的进程可以访问,而要求写的进程应该等待。

5) 完成1)、2)、3)功能的,得基本分,完成4)功能的加2分,有其它功能改进的再加2分3. 程序说明:本程序是模拟两个进程,生产者(producer)和消费者(Consumer)工作。

生产者每次产生一个数据,送入缓冲区中。

消费者每次从缓冲区中取走一个数据。

缓冲区可以容纳8个数据。

因为缓冲区是有限的,因此当其满了时生产者进程应该等待,而空时,消费者进程应该等待;当生产者向缓冲区放入了一个数据,应唤醒正在等待的消费者进程,同样,当消费者取走一个数据后,应唤醒正在等待的生产者进程。

就是生产者和消费者之间的同步。

每次写入和读出数据时,都将读和写指针加一。

当读写指针同样时,又一起退回起点。

当写指针指向最后时,生产者就等待。

当读指针为零时,再次要读取的消费者也应该等待。

为简单起见,每次产生的数据为0-99的整数,从0开始,顺序递增。

两个进程的调度是通过运行者使用键盘来实现的。

4. 程序使用的数据结构进程控制块:包括进程名,进程状态和执行次数。

【免费下载】东北大学操作系统第三次实验报告

【免费下载】东北大学操作系统第三次实验报告

命中次数++
被访问次数最少的
进程退出
};
int page_no;
char flag;
struct one_frame M_Frame[frame_num];
int main()
{
int i,j,k,t,m,kk,r1,r2,p1,p2;
int temp1,temp2,temp3;
int diseffect1=0,diseffect2=0;
实验 5:页面置换算法
一、 题目:编程实现 FIFO 和 LRU 算法
二、 目的: 进一步理解父子进程之间的关系; 理解内存页面调度的机理; 掌握页面置换算法的实现方法; 通过实验比较不同调度算法的优劣; 培养综合运用所学知识的能力。 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度
int k1=0,k2=0,f1=0,f2=0;
float f;
int Access_series[total_instruction];
for(i=0; i<frame_num; i++) M_Frame[i].page_no=-1; printf("页面: ");
for(i=0; i<8; i++)
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

os实验报告22153303

os实验报告22153303

计算机操作系统实验报告学 号: 2153303姓 名:王咏毅提交日期:2017-11-2成 绩:东北大学秦皇岛分校计算机与通信工程学院操作系统 实验报告 实验2使用动态分区分配方式的模拟1 实验目的(1)了解动态分区分配方式中使用的数据结构和分配算法(2)加深对动态分区存储管理方式及其实现过程的理解。

2 实验内容(1)分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。

其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。

(2)假设初始状态下,可用的内存空间为 1280KB,并有下列的请求序列:•作业1申请130KB。

•作业2申请60KB。

•作业3申请100KB。

•作业2释放60KB。

•作业4申请200KB。

•作业3释放100KB。

•作业1释放130KB。

•作业5申请140KB。

•作业6申请60KB。

•作业7申请50KB。

•作业6释放60KB。

分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。

3 实验结果(给出编写的程序源代码和运行结果的截图)#include<stdio.h>#include<stdlib.h>struct node //空闲分区链结点的定义{node *before;node *after;int size; intaddress; intstate; };node L; structusenode{usenode *next;int num;int add;intsize; }U,*n;东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告void Init() //空闲分区链的初始化{node *p;p=(node *)malloc(sizeof(node)); p->before=&L;p->after=NULL;p->size=640; p->address=0; p->state=0;L.after=p;L.before=NULL;L.size=0;U.next=NULL;n=&U;}node *search(int a){node *p=L.after;if(p==NULL){printf("没有空闲的区域!");p=NULL;return p;}else{while(p!=NULL && a>p->size) p=p->after;if(p==NULL){printf("没有找到合适的空闲空间!"); p=NULL;东北大学秦皇岛分校计算机与通信工程学院return p;}elsereturn p;}}void recovery(int a,int b) //内存回收算法{node *c,*s,*r=L.after; node*d=L.after,*e; usenode*k=U.next,*h=&U;while(k!=NULL && a!=k->num){h=k; k=k->next;}if(k==NULL)printf("没有找到这样的作业!");else{h->next=k->next;if(h->next==NULL)n=h;}while(r!=NULL) //若回收得到的空闲块的前方有空闲块合并此空闲块{if(k->add==r->address+r->size){r->size=r->size+k->size;break;东北大学秦皇岛分校计算机与通信工程学院}else r=r->after;}if(r==NULL) //若回收得到的空闲块的后面有空闲块合并此空闲块{r=L.after;while(r!=NULL){if(k->add+k->size==r->address){r->address=k->add; r->size=r->size+k->size;break;}else r=r->after;}}while(d!=NULL) //保证空闲链表中没有相邻的空闲空间{if(d->after!=NULL)e=d->after;elsebreak;if(d->address+d->size==e->address){d->after=e->after; while(e->after!=NULL) e->after->before=d; d->size=d->size+e->size;东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告free(e);break;}else d=d->after;}if(r==NULL){r=L.after;c=(node *)malloc(sizeof(node)); c->size=b;c->address=k->add;if(L.after==NULL){c->after=L.after; c->before=&L;L.after=c;}else{r=L.after;while(r!=NULL){if(r->address>c->address){c->after=r; c->before=r->before; r->before->after=c; r->before=c; free(k);return;}东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告elser=r->after;}}}free(k);}void alloc(int a ,int b) //分配内存算法{node *p,*q=L.after;usenode *m;p=search(b);if(p==NULL) return;m=(usenode *)malloc(sizeof(usenode));//生成一个被占用链表的结点, 并插入到该链表的尾部m->add=p->address;m->size=b; m->num=a; m->next=n->next; n->next=m;n=m; //保证 n 始终指向被占用链表的尾部,方便以后新生成结点的插入if(p->size>b) //如果申请空间的大小小于找到空闲空间的大小的处理{p->size=p->size-b; p->address=p->address+b;}else //如果申请空间的大小等于找到空闲空间的大小的处理{p->before->after=p->after;东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告if(p->after!=NULL)p->after->before=p->before;free(p);}}void sort() //对空闲链表进行排序{int max;node *p,*q,*r,*s;node a; p=L.after;while(p!=NULL) //让指针 q 指向链表的最后一个结点{q=p; p=p->after;}if(L.after->after==NULL)return;else{while(p!=q){s=r=p=L.after;max=r->size;while(s!=q->after){if(s->size>max){max=s->size;r=s; s=s->after;东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告}else s=s->after;}a.size=q->size;a.address=q->address; q->size=r->size; q->address=r->address; r->size=a.size; r->address=a.address; if(q->before->before==&L)return;else q=q->before;}}}void Print(){node *p=L.after;usenode *q=U.next;int i=1;printf("空闲区域列表:\n");printf("FREEID address size\n"); while(p!=NULL){printf("%-10d",i);printf("%-10d",p->address); printf("%d\n",p->size); p=p->after;i++;}if(q==NULL)东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告return;else{printf("已分配区域列表:\n"); printf("WORKID address size\n"); while(q!=NULL){printf("%-10d",q->num); printf("%-10d",q->add);printf("%d\n",q->size);q=q->next;}}}void firstfit() //首次适应算法{int a,b,i;Init();Print();while(1){printf("1、申请空间 2、释放空间 3、退出首次适应算法请输入你的选择:");scanf("%d",&i);switch(i){case 1:{printf("请输入申请空间的作业号:"); scanf("%d",&a);printf("请输入申请空间的大小:"); scanf("%d",&b);alloc(a,b);Print();break;}东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告case 2:{printf("请输入释放空间的作业号:"); scanf("%d",&a);printf("请输入释放空间的大小:"); scanf("%d",&b);recovery(a,b);Print();break;}case 3:printf("\n");return;}}}void bestfit(){int a,b,i;Init();Print();while(1){printf("1、申请空间 2、释放空间3、退出最佳适应算法请输入你的选择:"); scanf("%d",&i);switch(i){case 1:{printf("请输入申请空间的作业号:"); scanf("%d",&a);printf("请输入申请空间的大小:"); scanf("%d",&b);alloc(a,b);sort();Print();东北大学秦皇岛分校计算机与通信工程学院文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.操作系统 实验报告break;}case 2:{printf("请输入释放空间的作业号:"); scanf("%d",&a);printf("请输入释放空间的大小:"); scanf("%d",&b);recovery(a,b);sort();Print();break;}case 3:printf("\n");return;}}}int main(void){int i;while(1){printf("1、首次适应算法 2、最佳适应算法 3、退出请输入你的选择:"); scanf("%d",&i); switch(i){case 1:firstfit();break; case 2:bestfit();break; case 3:return 0; }}}东北大学秦皇岛分校计算机与通信工程学院东北大学秦皇岛分校计算机与通信工程学院东北大学秦皇岛分校计算机与通信工程学院操作系统 实验报告思考题(1)首次适应分配算法():对空闲分区表记录的要求是按地址递增的顺序排列的,每次分配时,总是从第1条记录开始顺序查找空闲分区表,找到第一个能满足作业长度要求的空闲区,分割这个空闲区,一部分分配给作业,另一部分仍为空闲区。

操作系统实验报告

操作系统实验报告
(2)a. Linux/UNIX的进程和CPU管理类命令:(8个)
命令名
功能
Ps
显示进程状态
Pstree
显示进程树(display a tree of processes)
Kill
给进程发信号
Killhall
按名给进程发信号(kill processes by name)
Skill,snice
报告进程状态(report process status)
(set and get scheduling algorithm/parameters)
sched_rr_get_interval
查看指定进程的SCHED_RR值(get the SCHED_RR interval for the named process)
f. Linux/UNIX进程管理类系统调用(4):与进程跟踪/进程运行时间有关的系统调用(2个)
设置静态优先级范围(get static priority range)
sched_setparam,sched_getparam
设置/查看调度参数
(set and get scheduling parameters)
sched_setscheduler,sched_getscheduler
设置/查看调度算法和参数
7,进程状态START。
8,队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:
1,进程在就绪队列中呆一个时间片,优先数加1。
<程序3>
#include<stdio.h>
main()
{
int p1,p2,i;
while((pl = fork ( ) ) ==-1);

东北大学操作系统实验一报告

东北大学操作系统实验一报告

操作系统实验报告班级物联网1302班学号姓名实验一:熟悉Linux系统目的:①熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。

●启动退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…●C语言编辑、编译内容及要求:●熟练掌握Linux基本文件命令;●掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;●认真做好预习,书写预习报告;●实验完成后要认真总结、完成实验报告login:用户登录系统使用login命令可以允许用户登录系统。

如果没有指定参数,登录时提示输入用户名。

如果该用户不是root,且如果/etc/nologin文件存在,这个文件的内容被显示到屏幕上,登录被终止。

命令语法:Login [选项][用户名]exit:退出系统使用exit命令可以退出shell命令语法:exit[选项]ls:列出目录和文件信息使用ls命令,对于目录而言将列出其中的所有的子目录与文件信息,对于文件而言将输出命令语法:ls[选项][目录|文件]ls命令部分选项含义cp:复制文件和目录使用cp命令可以复制文件vhe目录到其他目录中。

如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有的文件或目录复制到该目录中。

若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

命令语法:cp [选项][源文件|目录][目标文件|目录]cp命令部分选项含义命令格式:mv [选项] 源文件或目录目标文件或目录.mv命令部分选项含义命令格式:rm [选项] 文件…rm命令部分选项含义能是当前目录中已有的目录命令格式:mkdir [选项] 目录..mkdir命令部分选项含义命令格式:cd [目录名]。

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

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

课程编号:B080000070《操作系统》实验报告姓名班级指导教师石凯实验名称《操作系统》实验开设学期2016-2017第二学期开设时间第11周——第18周报告日期2017年7月3日评定成绩评定人石凯评定日期2017年7月5日东北大学软件学院实验一进程的同步与互斥实验题目:通过学习和分析基础例子程序,使用windows进程和线程编程(也可以采用Java 或Unix/Linux的POSIX线程编程)实现一个简单的生产者/消费者问题的程序。

关键代码:import java.util.ArrayList;public class Produce {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Produce(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void produce() {synchronized (object) {/*只有list为空时才会去进行生产操作*/try {while(!list.isEmpty()){System.out.println("生产者"+Thread.currentThread().getName()+" waiting");object.wait();}int value = 9999;list.add(value);System.out.println("生产者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}import java.util.ArrayList;public class Consumer {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Consumer(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void consmer() {synchronized (object) {try {/*只有list不为空时才会去进行消费操作*/while(list.isEmpty()){System.out.println("消费者"+Thread.currentThread().getName()+" waiting");object.wait();}list.clear();System.out.println("消费者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}实验结果:思考题:(1)如何控制进程间的相互通信?答:主要有:管道,信号,共享内存,消息队列(2)什么是进程的同步?什么是进程的互斥?分别有哪些实现方式?答:进程互斥是进程之间的间接制约关系。

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的操作系统是计算机系统的核心组成部分,本次《操作系统》课内实验旨在通过实际操作和观察,深入理解操作系统的基本原理、功能和运行机制。

具体目的包括:1、熟悉操作系统的常用命令和操作,如文件管理、进程管理、内存管理等。

2、掌握操作系统的资源分配和调度策略,观察其对系统性能的影响。

3、培养解决操作系统相关问题的能力,提高动手实践和分析问题的能力。

二、实验环境本次实验在以下环境中进行:1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code三、实验内容及步骤(一)文件管理实验1、创建、删除和重命名文件及文件夹打开文件资源管理器,在指定目录下创建新的文件夹和文本文件。

对创建的文件和文件夹进行重命名操作,观察文件名的变化。

选择部分文件和文件夹进行删除操作,验证是否成功删除。

2、文件复制、移动和属性设置选取一些文件,将其复制到其他目录,并观察复制过程和结果。

把特定文件移动到不同的位置,检查文件是否正确迁移。

设置文件的属性,如只读、隐藏等,查看属性设置后的效果。

(二)进程管理实验1、查看系统进程打开任务管理器,观察当前正在运行的进程列表。

了解进程的名称、PID(进程标识符)、CPU 使用率、内存占用等信息。

2、进程的终止和优先级设置选择一个非关键进程,尝试终止其运行,观察系统的反应。

调整某些进程的优先级,观察其对系统资源分配和运行效率的影响。

(三)内存管理实验1、查看内存使用情况通过系统性能监视器,查看物理内存和虚拟内存的使用情况。

观察内存使用量随时间的变化趋势。

2、内存优化操作关闭一些不必要的后台程序,释放占用的内存资源。

调整虚拟内存的大小,观察对系统性能的改善效果。

四、实验结果与分析(一)文件管理实验结果1、成功创建、删除和重命名文件及文件夹,系统能够准确响应操作,文件名和文件夹名的修改即时生效。

2、文件的复制和移动操作顺利完成,数据无丢失和损坏。

东北大学操作系统实验之Linux及进程状态

东北大学操作系统实验之Linux及进程状态

操作系统实验报告一实验一进程状态转换及其PCB的变化一、实验目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。

二、实验内容及要求:(1)、设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。

(2)、独立编写、调试程序。

进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。

(3)、合理设计与进程PCB相对应的数据结构。

PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。

(4)、设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。

(5)、代码书写要规范,要适当地加入注释。

(6)、鼓励在实验中加入新的观点或想法,并加以实现。

(7)、认真进行预习,完成预习报告。

(8)、实验完成后,要认真总结,完成实验报告。

五状态模型:三、主要数据结构:struct Run_type //运行态进程{char name;int state;int needtime;int priority;};struct Ready_type //就绪态进程{char name;int needtime;int priority;};struct Blocked_type //阻塞态进程{char name;int needtime;int priority;};四、程序源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>int i=0; int j=0;struct Run_type{char name;int state;int needtime;int priority;};struct Ready_type{char name;int needtime;int priority;};struct Blocked_type{char name;int needtime;int priority;};struct Run_type Cpu;struct Ready_type Ready[10];struct Blocked_type Blocked[10];void Creat(){ //创建一个新的进程int k=0;label1:printf(" input new process name(input a letter): \n");scanf("%s",&(Ready[i].name));getchar();for(k=0;k<i;k++)if(Ready[i].name==Ready[k].name||Ready[i].name==Ready[k].name+32||Ready[i].n ame==Ready[k].name-32){printf("the process is already exist!");goto label1;}printf("input needtime (input a int number):\n");label3:scanf("%d",&(Ready[i].needtime));getchar();if(Ready[i].needtime<1||Ready[i].needtime>100){printf("please input the true needtime(1--100)\n");goto label3;}printf(" input the priority(1--10): \n");label2:scanf("%d",&(Ready[i].priority));getchar();if(Ready[i].priority<1||Ready[i].priority>10){printf("please 1--10!\n");goto label2;}i++;}void Dispath() //P135{int t;char v;int k;int j;if(Cpu.state==0)if(Ready[i-1].needtime==0){printf("* there is no process ready!\n");exit(0);}else{for(k=0;k<i-1;k++)for(j=0;j<i-k-1;j++)if(Ready[j].priority>Ready[j+1].priority){t=Ready[j].priority;Ready[j].priority=Ready[j+1].priority;Ready[j+1].priority=t;t=Ready[j].needtime;Ready[j].needtime=Ready[j+1].needtime;Ready[j+1].needtime=t;v=Ready[j].name;Ready[j].name=Ready[j+1].name;Ready[j+1].name=v;}--i;=Ready[i].name;Cpu.needtime=Ready[i].needtime;Cpu.priority=Ready[i]. priority;Cpu.state=1;printf("*%5c is send to cpu! \n",);Cpu.needtime--;if(Cpu.needtime==0){printf("*%5c is finished \n",);Cpu.state=0;}}else{Ready[i].name=;Ready[i].needtime=Cpu.needtime;Ready[i].priority=Cpu.priority;for(k=0;k<i;k++)for(j=0;j<i-k;j++)if(Ready[j].priority>Ready[j+1].priority){t=Ready[j].priority;Ready[j].priority=Ready[j+1].priority;Ready[j+1].priority=t;t=Ready[j].needtime;Ready[j].needtime=Ready[j+1].needtime;Ready[j+1].needtime=t;v=Ready[j].name;Ready[j].name=Ready[j+1].name;Ready[j+1].name=v;}=Ready[i].name;Cpu.needtime=Ready[i].needtime;Cpu.priority=Ready[i]. priority;Cpu.state=1;printf("*%5c is send to cpu! \n",);Cpu.needtime--;if(Cpu.needtime==0){printf("*%5c is finished \n",);Cpu.state=0;}}}void Timeout(){if(Cpu.state==0){printf("* there is no process in cpu(please select Dispath!\n");exit(0);}else{Ready[i].name=;Ready[i].needtime=Cpu.needtime;Ready[i].priority=Cpu.priority;printf("%c is timeout \n",);=0;Cpu.needtime=0;Cpu.priority=0;Cpu.state=0;i++;}}void Eventwait(){if(Cpu.state!=0){Blocked[j].name=;Blocked[j].needtime=Cpu.needtime;Blocked[j].priority=Cpu.priority;printf("* %c is Blocked !\n",);j++;=Blocked[j].name;Cpu.needtime=Blocked[j].needtime;Cpu.priority=Blocked[j].priority;Cpu.state=0;}elseprintf("* There is no process in cpu!");}void Eventoccurs(char a){int k=0;int m=0;int n=0;int p=0;if(Blocked[0].needtime==0){printf("* there is no process blocked!\n");exit(0);}else{for(k;k<j;k++)if(Blocked[k].name==a){Ready[i].name=Blocked[k].name;Ready[i].needtime=Blocked[k].needtime;Ready[i].priority=Blocked[k].priority;p=1;m=j-k;for(n;n<m;n++){Blocked[k].name=Blocked[k+1].name;Blocked[k].needtime=Blocked[k+1].needtime;Blocked[k].priority=Blocked[k+1].priority;k++;}j--;i++;}if(p==1)printf("* %c is ready!\n",a);elseprintf("* %c is not found! \n",a);}}void main(){Cpu.state=0;int Cputime=0;int x=6;while(x!=0){printf("\n1:input new process 2:Dispath\n");printf("3:Timeout4:Eventwait\n");printf("5:Eventoccurs(select whose eventoccur ) 0:exit\n");label4:scanf("%d",&x);getchar();printf("\n==============================================================================\n");if(x==0||x==1||x==2||x==3||x==4||x==5){switch(x){case 1:Creat();break;case 2:Dispath();break;case 3:Timeout();break;case 4:Eventwait();break;case 5:char a;scanf("%c",&a);getchar(); Eventoccurs(a);break;default:printf("please select from 0 to 5\n");}printf("----------------------------- Cputime:%3d----------------------------------\n",Cputime);printf("| ProceNsname NeedTime Priority |\n");if(Cpu.state!=0)//显示Cpu中的程序{printf("| Cpu:%16c",);printf("%20d",Cpu.needtime);printf("%18d|\n",Cpu.priority);}elseprintf("| * Cpu is free |\n");int y=0;if(i==0)//显示Ready队列中的数据{printf("| *There is no process ready. |\n");}else{for(y;y<i;y++)//显示Ready中的程序{printf("| Ready%d:",y);printf("%15c",Ready[y].name);printf("%20d",Ready[y].needtime);printf("%18d|\n",Ready[y].priority);}}int z=0;if(j==0) //显示Blocked队列中的程序{printf("| *There is no process blocked. |\n");}else{for(z;z<j;z++){printf("| Blocked%d:",z);printf("%13c",Blocked[z].name);printf("%20d",Blocked[z].needtime);printf("%18d |\n",Blocked[z].priority);}}Cputime++;if(Cpu.state!=0)Cpu.needtime=Cpu.needtime-1;printf("-----------------------------------------------------------------------------\n");}else{printf("please input 0--5\n");goto label4;}}}五、运行结果:1.创建a,b两个进程2、调度进程(由于b优先级高,所以b先进入运行态)3、当b时间片到了,b变为就绪态4、再次调度(由于b优先级高,故还是b变成运行态)5、正在运行的b阻塞6、当b等待的事件发生,b重新进入就绪态六、程序使用说明:编译程序后若无错就执行程序,初始如下:其中:1表示创建新进程,随后输入进程名,所需时间,优先级 2表示系统调度进程,首先调度最高优先级3表示时间片已到,运行中的进程将编程就绪态4表示进程所需的事件尚未发生,进程将被阻塞5表示进程等待的事件已发生,进程从阻塞态变为就绪态 0退出程序10。

操作系统实验报告

操作系统实验报告
close:用于关闭文件。
write:用于写文件。
read:用于读文件。
rm:用于删除文件。
思考:
(1)如果引入磁盘索引结点,上述实现过程需要哪些修改?
(2)如果设计的是一个多用户文件系统,则又要进行哪些扩充?
3实验结果(给出编写的程序源代码和运行结果的截图并回答思考问题)
源代码:
实验心得:
基本上实现了DOS下简单文件系统的实现,通过学习基本掌握了文件系统的存储结构
(5)要求提供以下有关的操作:
format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
mkdir:用于创建子目录。
rmdir:用于删除子目录。
ls:用于显示目录。
cd:用于更改当前目录。
create:用于创建文件。
open:用于打开文件。
ID 0 1 2 3 4
PRIORITY 9 38 30 29 0
CPUTIME 0 0 0 0 0
ALLTIME 3 3 6 3 4
STARTBLOCK 2 -1 -1 -1 -1
BLOCKTIME 3 0 0 0 0
STATE ready ready ready ready ready
(5)为了清楚的观察各进程的调度过程,程序应将每个时间片内的情况显示出来,参照的具体格式如下:
(3)置换算法:请分别考虑OPT、FIFO和LRU算法。
(4)作业中指令的访问次序按下述原则生成:
•50%的指令是顺序执行的。
•25%的指令是均匀分布在前地址部分。
•25%的指令时均匀分布在后地址部分。
3实验结果(给出编写的程序源代码和运行结果的截图)

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统的核心组成部分,本次实验的主要目的是深入理解操作系统的工作原理和功能,通过实际操作和观察,掌握操作系统的进程管理、内存管理、文件系统管理等方面的知识和技能。

二、实验环境本次实验使用的操作系统为 Windows 10,开发工具为 Visual Studio 2019,编程语言为 C++。

三、实验内容及步骤1、进程管理实验(1)创建进程通过编程实现创建新的进程。

在代码中使用了 Windows API 函数CreateProcess 来创建一个新的进程。

首先,设置进程的启动信息,包括命令行参数、工作目录等。

然后,调用CreateProcess 函数创建进程,并检查返回值以确定创建是否成功。

(2)进程同步使用互斥量(Mutex)实现进程间的同步。

创建一个共享资源,多个进程尝试访问该资源。

通过互斥量来保证同一时间只有一个进程能够访问共享资源,避免了数据竞争和不一致的问题。

(3)进程通信采用管道(Pipe)进行进程间的通信。

创建一个匿名管道,一个进程作为发送端,向管道写入数据;另一个进程作为接收端,从管道读取数据。

通过这种方式实现了进程之间的数据交换。

2、内存管理实验(1)内存分配使用 Windows API 函数 VirtualAlloc 来分配内存。

指定分配的内存大小、访问权限等参数,并检查返回的内存指针是否有效。

(2)内存释放在不再需要使用分配的内存时,使用 VirtualFree 函数释放内存,以避免内存泄漏。

(3)内存保护设置内存的保护属性,如只读、读写等,以防止非法访问和修改。

3、文件系统管理实验(1)文件创建与写入使用 CreateFile 函数创建一个新文件,并通过 WriteFile 函数向文件中写入数据。

(2)文件读取使用 ReadFile 函数从文件中读取数据,并将读取的数据输出到控制台。

(3)文件属性操作获取文件的属性信息,如文件大小、创建时间、修改时间等,并进行相应的操作和显示。

东北大学操作系统实验 绝对自创 实验报告 含可执行源代码 linux环境可运行 有截图

东北大学操作系统实验 绝对自创 实验报告 含可执行源代码 linux环境可运行 有截图
queue<int> blockp;//等待进入缓冲区的数据
int data = 0;//生产者生产的数据
int num = 0;//缓冲区元素个数
int np = 0;//正在等待的生产者
int nc = 0;//正在等待的消费者
int main()
{
print();
char c;
while(scanf("%c",&c)!='e')
buffer.push(ch);
buffer.pop();
}
printf("\n");
}
三、实验结果
实验三进程的管道通信
一、实验目的
加深对进程概念的理解,明确进程和程序的区别。
学习进程创建的过程,进一步认识进程并发执行的实质。
分析进程争用资源的现象,学习解决进程互斥的方法。
学习解决进程同步的方法。
掌握Linux系统中进程间通过管道通信的具体实现。
read(fd[0],father,17);
cout << father << endl;
}
}
}
return 0;
}
三、实验结果
实验四页面置换算法
一、实验目的
进一步加深理解父子进程之间的关系及其并发执行。
理解内存页面调度的机理。
掌握页面置换算法及其实现方法。
培养综合运用所学知识的能力。
二、实验内容
#include <iostream>
{
if(Acess_Series[i] == M_Frame[j])//命中
{
cout << "子程序2 命中: " ;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

东北大学操作系统实验
报告
HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】
操作系统实验报告
物联网1302班
班级
学号
姓名
实验一:熟悉Linux系统
目的:
①熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。

启动退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…
C语言编辑、编译
内容及要求:
熟练掌握Linux基本文件命令;
掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;
认真做好预习,书写预习报告;
实验完成后要认真总结、完成实验报告
login:用户登录系统
使用login命令可以允许用户登录系统。

如果没有指定参数,登录时提示输入用户名。

如果该用户不是root,且如果/etc/nologin文件存在,这个文件的内容被显示到屏幕上,登录被终止。

命令语法:Login [选项][用户名]
exit:退出系统
使用exit命令可以退出shell
命令语法:exit[选项]
ls:列出目录和文件信息
使用ls命令,对于目录而言将列出其中的所有的子目录与文件信息,对于文件而言将输出
命令语法:ls[选项][目录|文件]
ls命令部分选项含义
选项含义
cp:复制文件和目录
使用cp命令可以复制文件vhe目录到其他目录中。

如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有的文件或目录复制到该目录中。

若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。

命令语法:cp [选项][源文件|目录][目标文件|目录]
cp命令部分选项含义
Mv:可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。

命令格式:mv[选项]源文件或目录目标文件或目录.
mv命令部分选项含义
rm:该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。

对于链接文件,只是删除了链接,原有文件均保持不变。

命令格式:rm[选项]文件…
rm命令部分选项含义
mkdir:命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录
命令格式:mkdir[选项]目录..
mkdir命令部分选项含义
cd:该命令设置某一进程的当前工作目录。

用户必须具有指定目录中的执行(搜索)许可权。

如果未指定目录参数,cd 命令会将当前工作目录设置为登录目录(在 ksh 和bsh 环境中是 $HOME,而在 csh 环境中则是 $home)。

如果指定的目录名是完整的路径名,它就成为当前工作目录。

完整的路径名以 /(斜杠)开头,表示根目录,而 .(点)表示当前目录,或者 ..(点点)表示父目录。

如果目录名不是完整的路径名,则 cd 命令会搜索与由 $CDPATH shell 变量(或 $cdpath csh 变量)指定的路径之一有关的路径名。

此变量与 $PATH shell 变量(或 $path csh 变量)具有相同的语法和相似的语义。

命令格式:cd[目录名]。

相关文档
最新文档