操作系统:进程创建与撤消

合集下载

操作系统实验报告进程管理

操作系统实验报告进程管理

操作系统实验报告进程管理操作系统实验报告:进程管理引言操作系统是计算机系统中的核心软件,负责管理计算机的硬件资源和提供用户与计算机之间的接口。

进程管理是操作系统的重要功能之一,它负责对计算机中运行的各个进程进行管理和调度,以保证系统的高效运行。

本实验报告将介绍进程管理的基本概念、原理和实验结果。

一、进程管理的基本概念1. 进程与线程进程是计算机中正在运行的程序的实例,它拥有独立的内存空间和执行环境。

线程是进程中的一个执行单元,多个线程可以共享同一个进程的资源。

进程和线程是操作系统中最基本的执行单位。

2. 进程状态进程在运行过程中会经历不同的状态,常见的进程状态包括就绪、运行和阻塞。

就绪状态表示进程已经准备好执行,但还没有得到处理器的分配;运行状态表示进程正在执行;阻塞状态表示进程由于某些原因无法继续执行,需要等待某些事件的发生。

3. 进程调度进程调度是操作系统中的一个重要任务,它决定了哪个进程应该获得处理器的使用权。

常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)和时间片轮转等。

二、进程管理的原理1. 进程控制块(PCB)PCB是操作系统中用于管理进程的数据结构,它包含了进程的各种属性和状态信息,如进程标识符、程序计数器、寄存器值等。

通过PCB,操作系统可以对进程进行管理和控制。

2. 进程创建与撤销进程的创建是指操作系统根据用户的请求创建一个新的进程。

进程的撤销是指操作系统根据某种条件或用户的请求终止一个正在运行的进程。

进程的创建和撤销是操作系统中的基本操作之一。

3. 进程同步与通信多个进程之间可能需要进行同步和通信,以实现数据共享和协作。

常见的进程同步与通信机制包括互斥锁、信号量和管道等。

三、实验结果与分析在本次实验中,我们使用了一个简单的进程管理模拟程序,模拟了进程的创建、撤销和调度过程。

通过该程序,我们可以观察到不同调度算法对系统性能的影响。

实验结果显示,先来先服务(FCFS)调度算法在一些情况下可能导致长作业等待时间过长,影响系统的响应速度。

操作系统复习-进程管理

操作系统复习-进程管理

2.1 进程与线程进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程)优先级是进程调度的重要依据,一旦确定就不能改变(错)在单CPU的系统中,任意时刻都有一个进程处于运行状态(错,可以空转)进程申请CPU得不到满足时,其状态变为阻塞(错!等待CPU的进程处于就绪状态)进程获得CPU运行是通过调度得到的(对)线程是一种特殊的进程(对)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对)进程是PCB结构、程序和数据的集合(对)撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进程,另一种是撤销指定进程和其子孙进程)线程的切换,可能会引起进程的切换(对)引入线程后,处理机只在线程中切换(错!!)线程是比进程更小的能独立运行的基本单位(错,这句话的成立需要一定的前提条件)线程的引入增加了程序执行的时空开销(错,应为减少)一个进程一定包含多个线程(错)一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)中断是进程切换的必要条件,而不是充分条件。

(对)进程的基本特点:动态性,并发性,独立性,异步性,结构性。

在多道程序设计环境下,操作系统分配资源以进程为基本单位在引入线程的操作系统中,资源分配的基本单位是进程,CPU分配的基本单位是线程。

在引入线程的操作系统中,进程是资源分配的基本单位,线程是调度的基本单位从运行状态到就绪状态是由于时间片用完或出现了比现在进程优先级更高的进程(调度程序决定)从就绪状态到运行状态是调度程序决定的从阻塞状态到就绪状态是协作程序决定的从运行状态到阻塞状态是进程自身决定的(只有这个是主动的)对进程的管理和控制使用原语。

(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)一个进程被唤醒意味着进程变为就绪状态(该进程可能重新占用CPU)。

(唤醒原语的功能是将被被唤醒进程从阻塞队列中移到就绪队列中)降低进程优先级的合理时机是进程的时间片用完。

操作系统基本概念

操作系统基本概念

操作系统基本概念操作系统是指计算机系统中的核心软件,它是一组管理计算机硬件与软件资源、控制程序运行、提供用户接口、实现文件管理和网络通信等功能的程序集合。

操作系统的基本概念主要包括四个方面:进程管理、存储管理、文件系统和设备管理。

1.进程管理:进程是指正在运行的程序的实例,它是计算机系统中最基本的运行单位。

操作系统通过进程管理来控制和分配计算机系统中的资源。

进程管理包括进程的创建与撤销、进程状态的转换(就绪、运行、等待)、进程调度和进程间通信等。

进程调度是操作系统的核心功能之一,它决定了计算机系统中各个进程的运行顺序和调度策略。

常见的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、最高优先级优先(PRIORITY)和时间片轮转(RR)等。

2.存储管理:存储管理是操作系统管理计算机的内存资源,它主要包括内存分配与回收、地址映射和内存保护等。

操作系统通过存储管理来实现程序的加载和运行、保护不同进程的内存空间和实现虚拟内存等功能。

内存分配与回收是存储管理的核心功能之一,它负责为不同的进程分配内存空间,以满足程序的运行需求。

常见的内存分配算法包括首次适应算法(FFA)、最佳适应算法(BFA)和最坏适应算法(WFA)等。

地址映射是操作系统将逻辑地址转换为物理地址的过程,它涉及到页表、分段表等数据结构来实现。

通过地址映射,操作系统能够为进程提供一致性的内存访问,实现虚拟内存等功能。

3.文件系统:文件系统是操作系统管理计算机存储设备上的文件和目录的方法,它通过文件、目录和文件操作来为用户管理和存储数据。

文件系统还提供了对文件的共享、保护和存取控制等功能。

常见的文件系统包括FAT、NTFS(Windows操作系统)、EXT2/3/4(Linux操作系统)等。

文件系统通过将文件组织为目录树的结构,方便用户对文件进行管理和存取。

文件操作是文件系统的核心功能之一,包括文件的创建、删除、读取和写入等。

文件系统通过文件操作接口提供给用户对文件的操作和访问。

操作系统课程的主要内容

操作系统课程的主要内容

操作系统课程的主要内容1、操作系统的发展,分类,特征,功能,结构,内核,多道程序设计,并发,处理机状态等等。

2、功能主要有:(1)处理机管理:可归结为进程管理,包括以下方面–进程控制。

创建进程,撤销进程,控制进程的运行状态转换。

–进程调度。

从就绪的进程队列中选择一进程并把处理机分配给它,设置现场并是指投入运行。

–进程同步。

设置进程同步信息,以协调系统中各进程的运行。

–进程通信。

负责进程间的信息交换。

–死锁。

死锁如何解决的各种方法。

–线程。

线程的实现方式,和进程的关系。

(2)存储管理:为多道程序的运行提供良好的环境,并提高利用率,包括以下方面:地址重定位。

实现逻辑地址到物理地址的转换。

存储分配。

为每道程序分配内存空间,并在作业结束后收回其所占用内存。

存储保护。

保证每道程序之间不能互相侵犯,尤其是不能侵犯操作系统。

存储扩充。

通过建立虚拟存储系统来实现内存逻辑上的扩充。

(3)设备管理:设备管理的主要目标是方便的设备使用、提高CPU与I/O设备利用率。

主要包括:缓冲管理:设立I/O缓冲区,并对缓冲区进行有效管理。

设备分配:按一定策略和设备使用情况,分配并回收设备。

设备处理:即设备驱动程序,实现CPU和设备控制器之间的通讯等。

设备独立性和虚拟设备:独立性指应用程序独立于物理设备,使用户编程与实际使用的设备无关,增强了可移植性。

虚拟设备指将低速的设备改造为高速的共享设备。

(4)信息管理(文件系统管理):对用户文件和系统文件进行管理,解决文件资源的存储、共享、保密和保护。

包括以下方面:目录管理:为每一文件建立目录项,并对目录实施有效的组织与管理。

文件的读写管理和存取控制:解决信息安全问题。

系统设口令“哪个用户”、用户分类“哪个用户组”、文件权限“针对用户或用户组的读写权”。

文件存储空间管理:解决如何存放信息,以提高空间利用率和读写性能。

软件管理:软件的版本、相互依赖关系、安装和拆除等。

(5)用户接口目标是提供一个友好的用户访问操作系统的接口。

操作系统:进程创建与撤消

操作系统:进程创建与撤消

操作系统实验报告试验一:进程创建与撤销计科112康岩岩2011008142202013/4/10实验一:进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。

二、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通用户身份认识windows的进程管理。

通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言VC++/Java/C#的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。

三、实验步骤1、windows的进程管理以下是win7的人物管理器,可以进行进程的查看、创建、撤销等操作,由于操作比较简单与琐碎,这里不再具体描述。

2、VC++/Java/C#的进程创建与撤销工具对于本次试验,我使用C#进行进程创建、撤销等测试,具体内容在下面给出。

3、进程创建与撤销的模拟实现(1)总体设计:此次程序完全由c#实现,能够通过窗体界面详细地生动地显示进程的运行状态。

下面一步一步的进行实现①数据定义:类PCB的定义如下:class PCB{string pcbName; //进程名int pcbId; //IDlong startTime; //开始时间long pcbRuntime = 0; //运行时间int pcbLeve; //线程优先级}对于所有的进程信息,用以下表储存:Dictionary<int,Hashtable>ThreadTable=new Dictionary<int,Hashtable>();容器ThreadTable用来储存所有进程简直key 表示进程id,值为Hashtable,储存的为线程信息,②函数CREATE(PCB pcb)—进程创建:创建进程需要传入一个PCB 对象,然后启动一个单独的线程来操作该对象,操作该对象就是把线程运行的状态传送给PCB同时PCB也唯一地标示其所在的线程。

操作系统第4章答案(上)

操作系统第4章答案(上)

赵盈盈2011210593 第四章作业上1. 解释名词:程序的顺序执行;程序的并发执行。

答:程序的顺序执行:一个具有独立功能的程序独占cpu直到得到最终结果的进程。

程序的并发执行:两个或两个以上程序在计算机系统中同时处于一开始执行且尚未结束的状态。

2. 什么是进程?进程与程序的主要区别是什么?答:进程:进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单元。

进程和程序的区别:●程序是静态的,进程是动态的●进程有程序和数据两部分组成●进程具有生命周期,有诞生和消亡,是短暂的;而程序是相对长久的●进程能更真实的描述并发,而程序不行。

●一个进程可以对应多个程序。

一个程序可以对应多个进程●进程可以创建其他进程,程序不能3. 图1所示,设一誊抄程序,将f中记录序列正确誊抄到g中,这一程序由get、copy、put三个程序段组成,它们分别负责获得记录、复制记录、输出记录。

请指出这三个程序段对f中的m个记录进行处理时各种操作的先后次序,并画出誊抄此记录序列的先后次序图(假设f中有1,2,…,m个记录,s,t为设置在主存中的软件缓冲区,每次只能装一个记录)。

图1 改进后的誊抄过程答:4. 进程有哪几种基本状态?试画出进程状态变迁图,并标明发生变迁的可能原因。

答:进程基本状态:运行、就绪、等待就绪到运行:调度程序选择一个新的进程运行 运行到就绪:运行进程用完了时间片或运行进程被中断,因为一个高优先级的进程处于就绪状态运行到等待:OS 尚未完成服务或对一资源的访问尚不能进行或初始化I/O 且必须等待结果 或等待某一进程提供输入(IPC )等待到就绪:当所有的事件发生时5. 什么是进程控制块?它有什么作用?答:PCB :为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义的一个专门的数据结构。

作用:系统用PCB 来控制和管理进程的调用,PCB 也是系统感知进程存在的唯一标志GCGPCP G… CP6. n 个并发进程共用一个公共变量Q ,写出用信号灯的p 、v 操作实现n 个进程互斥时的程序描述,并说明信号灯值的取值范围。

操作系统的功能与分类

操作系统的功能与分类

操作系统的功能与分类随着计算机技术的不断发展,操作系统作为计算机系统的重要组成部分,扮演着至关重要的角色。

操作系统是一种控制和管理计算机硬件、软件资源的系统软件,它提供了一系列功能,使得计算机可以高效地运行。

本文将探讨操作系统的功能与分类。

一、功能1. 进程管理操作系统负责管理计算机中运行的各个进程。

它通过分配CPU时间片、调度进程的执行、保护进程等机制,实现了进程的创建、撤销、挂起与唤醒等操作。

进程管理的目标是提高计算机的资源利用率和系统的响应速度。

2. 内存管理操作系统负责管理计算机的内存空间。

它通过内存分配、地址转换、内存保护等机制,确保每个程序都能够得到足够的内存空间,并且互不干扰。

内存管理还包括内存回收和交换技术,以及虚拟内存的支持,以提高内存的利用率和系统的性能。

3. 文件系统操作系统管理计算机中的文件和文件夹。

它提供了对文件的创建、读取、写入和删除等操作,以及对文件夹的创建、重命名和删除等操作。

文件系统还负责文件的存储分配、磁盘空间管理和文件权限控制等功能,以保证文件的安全性和可靠性。

4. 设备管理操作系统管理计算机的各种输入输出设备。

它通过设备驱动程序和中断处理机制,控制和调度设备的使用。

设备管理包括对设备的初始化、请求设备资源、分配设备时间片等操作,以确保设备的正常工作和高效利用。

5. 用户界面操作系统提供了用户与计算机之间的交互界面。

它可以是命令行界面、图形用户界面或者基于触摸屏的用户界面等形式。

用户界面使得用户能够方便地操作计算机,执行各种命令和任务。

二、分类操作系统根据其结构特点和应用领域的不同,可以分为以下几类:1. 批处理操作系统批处理操作系统适用于对大量相同类型的任务进行自动化处理的场景。

它接收用户提交的一批作业,按照预定的顺序进行处理,并输出结果。

批处理操作系统主要用于科学计算、数据处理和批量生产等场景。

2. 分时操作系统分时操作系统适用于多用户共享计算机资源的场景。

操作系统的基本功能

操作系统的基本功能

操作系统的基本功能操作系统是计算机系统中的核心软件之一,承担着管理和控制计算机硬件以及支持用户软件运行的重要任务。

操作系统的基本功能涵盖了各种方面,下面将从进程管理、内存管理、文件系统管理以及设备管理四个方面来介绍操作系统的基本功能。

一、进程管理进程管理是操作系统中的核心功能之一,它负责对计算机系统中所有的进程进行管理和控制。

进程是指正在运行的一个程序的实例,每个进程都拥有自己的内存空间、CPU时间片以及相关资源。

操作系统通过进程管理来实现进程的创建、撤销、调度和通信等功能。

1. 进程创建:操作系统负责接收用户或其他进程的请求,创建新的进程,为其分配资源,并初始化进程控制块(PCB)等数据结构。

2. 进程撤销:操作系统可以根据用户或系统的请求,撤销已经运行完毕或出现错误的进程,回收相关资源,并释放进程所占用的内存空间。

3. 进程调度:操作系统通过进程调度算法来决定每个时刻应该运行哪些进程,以实现多道程序同时运行的效果。

4. 进程通信:操作系统提供进程间通信的机制,使得不同进程之间可以通过共享内存、管道、消息队列等方式进行信息的交换和共享。

二、内存管理内存管理是操作系统的另一个基本功能,主要负责管理计算机系统中的内存资源,包括内存的分配与回收、地址映射等。

1. 内存分配:操作系统负责为各个进程分配内存空间,以满足其运行所需。

常见的内存分配算法包括连续分配、离散分配、虚拟内存等。

2. 内存回收:当进程运行结束或者被撤销时,操作系统将回收其所占用的内存空间,以便于为其他进程提供空间。

3. 地址映射:操作系统通过地址映射机制,将逻辑地址(用户程序使用的地址)转换为物理地址(内存中的实际地址),以实现对内存的有效访问。

三、文件系统管理文件系统管理是操作系统的另一个重要功能,它负责对存储设备上的文件进行管理和控制,包括文件的创建、读写、删除以及文件的组织和保护等。

1. 文件创建与删除:操作系统提供文件管理接口,使用户或应用程序能够方便地创建新文件或删除已有文件。

什么是操作系统内核

什么是操作系统内核

什么是操作系统内核操作系统内核是操作系统的核心组成部分,负责管理和控制计算机硬件资源,并为其他软件提供运行环境。

它是操作系统的基础,直接与硬件进行交互,协调和调度各个进程的执行。

一、操作系统内核的定义操作系统内核是指操作系统最底层的核心部分,它位于操作系统的最上层硬件抽象层之下,与硬件直接交互、管理和控制硬件资源。

二、操作系统内核的功能1.进程管理:操作系统内核负责创建、启动、停止和撤销进程,同时进行进程之间的切换和调度,保证系统资源的合理分配和利用。

2.内存管理:内核负责内存空间的分配和回收,对进程请求的内存进行分页和映射,进行内存的读写操作,并负责虚拟内存和物理内存之间的映射。

3.文件系统管理:操作系统内核负责文件的创建、读取、写入和删除等操作,同时维护文件的目录结构和权限控制,保证文件的安全性和完整性。

4.设备管理:内核管理与硬件设备的交互,包括对输入输出设备的控制,处理设备中断和异常情况,以及驱动程序的加载和管理。

5.系统调用:操作系统内核提供一系列的系统调用接口,为其他应用程序提供访问操作系统功能的接口,以实现各种操作系统功能的调用和扩展。

三、操作系统内核的类型操作系统内核可以分为两大类:宏内核(Monolithic Kernel)和微内核(Microkernel)。

1.宏内核(Monolithic Kernel):宏内核将所有的核心功能集中在一个单独的内核中,包括进程管理、内存管理、文件系统管理等。

它的优点是性能高,因为在单个内核中执行,减少了上下文切换的开销。

但是,它的缺点是安全性较差,一个错误的驱动程序可能导致整个系统崩溃。

2.微内核(Microkernel):微内核将只包含最基本的功能,如进程调度、任务切换、消息传递等,更高级别的功能会被实现为用户态的服务,与内核通过消息传递进行通信。

它的优点是安全性更高,因为核心功能更少,用户态的服务可以通过权限隔离进行保护。

但是,它的缺点是性能略低,因为需要频繁地在内核态和用户态之间进行切换。

实验一进程的创建与撤销

实验一进程的创建与撤销

实验一:进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。

二、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通用户身份认识windows的进程管理。

通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言Java的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。

三、实验步骤1、windows的进程管理(1)按ctrl+alt+delete键,弹出windows任务管理器窗口(2)选择相应操作序号,可以创建一个新的进程(3)在创建完一个新的进程后,可以显示出所有已创建进程的详细信息(4)选择相应操作序号,可以通过输入pcbId或pcbGrade来撤销一个进程2、进程创建与撤销工具(1)进程的创建Process p=Runtime.getRuntime().exec("notepad");(2)进程的撤销p.destroy();3、进程创建与撤销的模拟实现(1)总体设计:①数据结构定义:结构体PCB:进程编号,进程名称,进程优先级和进程创建时间,队列按进程创建时间排序。

PCB空间就绪队列指针空队列指针②函数进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列;进程终止:将指定的就绪进程移出就绪队列,插入空队列;就绪队列输出:输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;主函数:调用创建函数、调用终止函数、输出就绪队列;③主界面设计:进程创建、进程撤销、退出程序图1 操作主界面④功能测试:从显示出的就绪队列状态,查看操作的正确与否。

(2)详细设计:①数据结构定义:结构体PCB:表1 PCB结构体表PCB空间:是一个能存放十个PCB对象的数组就绪队列指针:定义一整型变量初始值为零空队列指针:定义一整型变量初始值为零,当有进程创建时,加入。

《计算机操作系统》第2章 进程管理

《计算机操作系统》第2章  进程管理

2.1.3 进程的状态模型
新建
准许
准许
挂起
静止就绪
事件 发生
静止阻塞
激活 挂起
激活 挂起
活动就绪
事件 发生 活动 阻塞
分派 超时
运行
等待 事件
释放
退出
பைடு நூலகம்
图2-8 有挂起态的七状态模型
在新的状态模型中,比较重要的新转换如下: ►(1)活动阻塞→静止阻塞:当内存紧张而系统中又没有就绪进程时,一个阻塞
态进程就会被挂起。
分派
进入
非运行
运行
退出
暂停 图2-3 两状态模型
2.1.3 进程的状态模型
2. 三状态模型
三状态模型中进程的三种基本状态如下:
►(1)就绪状态(Ready)。一个进程获得了除处理机之外所需的一切资源,一 旦得到处理机即可运行。在系统中,将处于就绪状态的多个进程的PCB组织成一 个队列,或按照某种规则排在不同的队列中,这些队列称为就绪队列。
2.1.3 进程的状态模型
3. 五状态模型
新建态
进入就 绪队列
运行态
被调 度 时间片
用完
就绪态
事件
发生
退出态 等待事件 阻塞态
图2-6 五状态模型图
►为便于进程管理,有必要增加一种有用的状态,我们称为新建态,对应于刚刚创建 的进程,操作系统还没有把它加入到就绪队列中,通常是进程控制块已经创建但还 没有加载到内存中的新进程。
►同样,进程从系统中退出时,也增加一种有用的状态,进程被终止直到释放PCB所 处的状态,我们称为退出态。
2.1.3 进程的状态模型
五状态模型中的状态转换:
►(1)空→新建:创建一个程序的新进程。

操作系统的主要功能有处理机管理

操作系统的主要功能有处理机管理

操作系统的主要功能——处理机管理引言操作系统是计算机系统中的核心软件,它负责管理计算机硬件资源和提供用户与计算机系统交互的接口。

操作系统的主要功能之一是处理机管理。

处理机管理涉及到对计算机的CPU(中央处理器)的合理分配和调度,以提高计算机系统的整体性能和效率。

本文将详细介绍处理机管理的主要功能以及相关的概念和算法。

处理机管理的基本概念进程一个进程可以看做是正在执行的程序的实例。

它包括程序的指令、数据和相关的执行状态信息。

操作系统通过进程的创建、撤销、控制和同步,来管理计算机中的多个任务。

线程线程是进程中的一个执行单元,是进程中的实际工作者。

一个进程可以包含多个线程,线程共享进程的资源和上下文信息。

操作系统通过线程的创建、调度和同步,来提高计算机系统的并发度和响应能力。

进程调度进程调度是指按照某种算法从就绪队列中选择一个进程,使之占用处理机运行。

常用的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转、优先级调度等。

线程调度线程调度是指操作系统决定何时将处理机切换到另一个线程上运行的过程。

线程调度算法旨在确保公平性、提高响应时间、最大程度地利用处理机资源等。

上下文切换当操作系统将处理机从一个进程或线程切换到另一个进程或线程时,需要保存当前进程或线程的上下文(包括程序计数器、寄存器等)以及加载下一个进程或线程的上下文。

这个过程就是上下文切换。

处理机管理的主要功能进程与线程管理操作系统负责进程和线程的创建、撤销和控制。

它为每一个进程和线程分配所需的资源,并提供进程和线程间的通信机制(如共享内存、消息传递等)。

操作系统还负责确保进程和线程的运行顺序和优先级,以充分利用系统资源。

进程和线程调度操作系统通过进程和线程调度算法来决定处理机分配给哪个进程或线程运行。

这些调度算法旨在提高系统的性能和响应能力,保证不同进程和线程之间的公平性。

上下文切换管理上下文切换是切换进程或线程执行所需的关键操作。

什么是操作系统操作系统有什么功能

什么是操作系统操作系统有什么功能

什么是操作系统操作系统有什么功能操作系统是计算机系统中的一个关键组成部分,它是一种系统软件,用于管理和控制计算机的硬件和软件资源。

操作系统有着多项重要功能,下面将逐一进行论述。

一、资源管理功能操作系统通过资源管理功能,有效地管理计算机硬件和软件资源,以实现对这些资源的合理利用和调度。

资源管理包括处理器管理、内存管理、文件管理和设备管理等方面。

1. 处理器管理:操作系统负责处理器的分配和调度,可以控制多个进程(程序的执行实例)之间的并发执行,提高系统的吞吐量和响应速度。

2. 内存管理:操作系统管理计算机的内存资源,负责内存的分配和回收,实现虚拟内存技术,使得用户程序可以以逻辑连续的方式运行,同时可以利用磁盘空间作为辅助存储。

3. 文件管理:操作系统通过文件管理功能,提供对文件的存储、共享和保护等操作。

它负责文件的组织、存储和检索,为用户提供了方便的文件操作接口。

4. 设备管理:操作系统管理计算机的各种输入输出设备,包括硬盘、打印机、键盘、鼠标等。

通过设备管理功能,操作系统可以提供设备的驱动程序,方便用户访问和使用设备。

二、用户接口功能操作系统提供了用户与计算机系统之间的接口,使得用户可以方便地使用计算机系统。

用户接口通常分为命令行界面和图形用户界面两种形式。

1. 命令行界面:操作系统提供了命令行界面,用户可以通过输入命令来操作计算机系统。

命令行界面通常通过字符终端或控制台提供,具有简洁、高效的特点。

2. 图形用户界面:操作系统提供了图形用户界面,用户可以通过鼠标、窗口、菜单等图形化元素进行操作。

图形用户界面通常具有直观、友好的特点,适用于大多数普通用户。

三、进程管理功能操作系统通过进程管理功能,实现对进程的创建、撤销、调度和同步等操作,确保多个进程可以并发运行,同时不会相互干扰或冲突。

进程是指正在执行的程序及其相关的资源。

1. 进程调度:操作系统根据一定的算法,确定哪些进程可以获得处理器的使用权,以提高处理器的利用率和系统的响应速度。

《操作系统》实验二

《操作系统》实验二

《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。

通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。

二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。

b.设计一个简单的进程调度算法,如轮转法或优先级调度法。

c.实现进程间的通信机制,如共享内存或消息队列。

2、线程调度a.实现线程的创建、撤销和调度。

b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。

3、内存管理a.设计一个简单的分页内存管理系统。

b.实现内存的分配和回收。

c.实现一个简单的内存保护机制。

4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。

b.实现文件的存储和检索。

c.实现文件的备份和恢复。

三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。

b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。

可以使用模拟的方法,不需要真实的硬件环境。

c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。

2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。

b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。

同样可以使用模拟的方法。

3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。

b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。

可以使用模拟的方法。

4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。

b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。

操作系统实验---进程的创建与控制

操作系统实验---进程的创建与控制

实验报告实验题目姓名:学号:课程名称:操作系统实验所在学院:信息科学与工程学院专业班级:计算机任课教师:核心为fork( )完成以下操作:(1)为新进程分配一进程表项和进程标识符进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。

若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。

(2)检查同时运行的进程数目超过预先规定的最大数目时,fork( )系统调用失败。

(3)拷贝进程表项中的数据将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。

(4)子进程继承父进程的所有文件对父进程当前目录和所有已打开的文件表项中的引用计数加1。

(5)为子进程创建进程上、下文进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。

(6)子进程执行虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意子进程的注意子进程的PC 开始位置),然后根据pid 变量保存的fork( )返回值的不同,执行了不同的分支语句。

四、实验过程、步骤及内容1、编写一段程序,使用系统调用fork( )创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

3、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容4、用fork( )建立如下形式的进程树:A进程B进程C进程D进程各个进程中都打印出本身PID 和其父进程的PID,并用wait( )来控制进程执行顺序,打印出正确和期望的结果。

进程创建撤销实验报告

进程创建撤销实验报告

一、实验目的1. 理解进程的概念及其在操作系统中的作用。

2. 掌握进程创建和撤销的基本原理和方法。

3. 通过实验加深对进程管理机制的理解。

二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 编译器:GCC三、实验原理在操作系统中,进程是系统进行资源分配和调度的基本单位。

进程创建是指从无到有地创建一个新的进程,而进程撤销则是指结束一个进程的生命周期。

进程创建和撤销是操作系统进程管理中的重要操作。

四、实验内容1. 进程创建实验2. 进程撤销实验五、实验步骤1. 进程创建实验(1)创建一个新进程```c#include <stdio.h>#include <unistd.h>#include <sys/types.h>int main() {pid_t pid = fork(); // 创建子进程if (pid == -1) {perror("fork failed");return 1;} else if (pid == 0) {// 子进程printf("Child process: PID = %d\n", getpid());// 执行子进程的任务} else {// 父进程printf("Parent process: PID = %d\n", getpid());// 等待子进程结束wait(NULL);}return 0;}```(2)编译并运行程序```bashgcc -o process_create process_create.c./process_create```(3)观察输出结果在控制台会看到两个进程的PID,其中一个为父进程,另一个为子进程。

2. 进程撤销实验(1)创建一个新进程```c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>int main() {pid_t pid = fork(); // 创建子进程if (pid == -1) {perror("fork failed");return 1;} else if (pid == 0) {// 子进程printf("Child process: PID = %d\n", getpid()); // 执行子进程的任务sleep(10); // 子进程睡眠10秒} else {// 父进程printf("Parent process: PID = %d\n", getpid()); // 等待子进程结束wait(NULL);}return 0;}```(2)编译并运行程序```bashgcc -o process_destroy process_destroy.c./process_destroy```(3)观察输出结果在控制台会看到两个进程的PID,父进程会等待子进程结束。

操作系统进程调度模拟程序实验报告

操作系统进程调度模拟程序实验报告

操作系统进程调度模拟程序实验报告一、实验目的本次实验旨在通过编写一个模拟操作系统进程调度的程序,以加深对进程调度算法的理解。

二、实验内容1. 实现进程相关的数据结构:进程PCB(Process Control Block)。

2.实现进程的创建、撤销以及调度等操作函数。

3. 实现常见的进程调度算法:先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(RR)、优先级调度(Priority)。

4.编写测试程序,验证实现的进程调度算法在不同场景下的表现。

三、实验过程及结果1.进程PCB的设计与实现进程PCB是进程的核心数据结构,用于存储和管理进程相关的信息,包括进程状态(就绪、运行、阻塞)、优先级、执行时间等。

2.进程的创建、撤销及调度函数的实现(1)进程创建函数:实现进程的创建,包括为其分配空间、初始化进程PCB等。

可以根据实际需求,设定进程的优先级、执行时间等属性。

(2)进程撤销函数:实现进程的撤销,包括释放其占用的资源、回收其使用的空间等。

(3)进程调度函数:根据不同的调度算法,实现进程的调度。

可以通过设置时间片大小、优先级设定等方式,实现不同调度算法的效果。

3.进程调度算法的设计与实现(1)先来先服务(FCFS)调度算法:按照进程到达的先后顺序,依次进行调度。

(2)最短作业优先(SJF)调度算法:根据进程的执行时间,选择执行时间最短的进程进行调度。

(3)轮转调度(RR)算法:按照时间片的大小进行调度,每个进程在一个时间片内执行,超过时间片后,暂停并进入等待队列,让其他进程执行。

(4)优先级调度(Priority)算法:根据进程的优先级,选择优先级最高的进程进行调度。

4.测试程序编写测试程序,模拟不同的进程到达顺序、执行时间和优先级等场景,验证不同调度算法的表现。

四、实验结果与分析通过测试程序的运行结果,观察不同调度算法的特点和效果。

可以得出以下结论:1.FCFS算法适用于进程到达时间差异较大的场景,保证了先到先服务。

操作系统-进程的概念

操作系统-进程的概念

操作系统-进程的概念计算机中,CPU是最宝贵的资源,为了提⾼CPU的利⽤率,引⼊了多道程序设计的概念。

当内存中多个程序存在时,如果不对⼈们熟悉的“程序”的概念加以扩充,就⽆法刻画多个程序共同运⾏时系统呈现出的特征。

⼀、进程的引⼊多道程序系统中,程序具有:并⾏、制约以及动态的特征。

程序概念难以便是和反映系统中的情况:1. 程序是⼀个静态的概念程序是完成某个功能的指令集和。

系统实际上是出于不断变化的状态中,程序不能反映这种动态性。

2. 程序概念不能反映系统中的并⾏特性例如:两个C语⾔源程序由⼀个编译程序完成编译,若⽤程序概念理解,内存中只有⼀个编译程序运⾏(两个源程序看作编译程序的输⼊数据),但是这样⽆法说明⽩内存中运⾏着两个任务。

程序的概念不能表⽰这种并⾏情况,反映不了他们活动的规律和状态变化。

就像不能⽤菜谱(程序)代替炒菜(程序执⾏的过程)⼀样(这句话我稍微修改了⼀下,感觉应该是这样表诉才对)⼆、进程的定义进程:⼀个具有⼀定独⽴功能的程序关于某个数据集合的⼀次运⾏活动,是系统进⾏资源分配和调度运⾏的基本单位三、进程与程序的差别1. 进程是⼀个动态的概念进程是程序的⼀次执⾏过程,是动态概念程序是⼀组有序的指令集和,是静态概念2. 不同的进程可以执⾏同⼀个程序区分进程的条件:所执⾏的程序和数据集合。

两个进程即使执⾏在相同的程序上,只要他们运⾏在不同的数据集合上,他们也是两个进程。

例如:多个⽤户同时调⽤同⼀个编译程序编译他们编写的C语⾔源程序,由于编译程序运⾏在不同的数据集合(不同的C语⾔源程序)上,于是产⽣了⼀个个不同的进程3. 每个进程都有⾃⼰的⽣命周期当操作系统要完成某个任务时,它会创建⼀个进程。

当进程完成任务之后,系统就会撤销这个进程,收回它所占⽤的资源。

从创建到撤销的时间段就是进程的⽣命期4. 进程之间存在并发性在⼀个系统中,同时会存在多个进程。

他们轮流占⽤CPU和各种资源5. 进程间会相互制约进程是系统中资源分配和运⾏调度的单位,在对资源的共享和竞争中,必然相互制约,影响各⾃向前推进的速度6. 进程可以创建⼦进程,程序不能创建⼦程序7. 从结构上讲,每个进程都由程序、数据和⼀个进程控制块(Process Control Block, PCB)组成四、进程的重要特征1. 动态特征:进程对应于程序的运⾏,动态产⽣、消亡,在其⽣命周期中进程也是动态的、2. 并发特征:任何进程都可以同其他进程⼀起向前推进3. 独⽴特征:进程是相对完整的调度单位,可以获得CPU,参与并发执⾏4. 交往特征:⼀个进程在执⾏过程中可与其他进程产⽣直接或间接关系5. 异步特征:每个进程都以相对独⽴、不可预知的速度向前推进6. 结构特征:每个进程都有⼀个PCB作为他的数据结构进程最基本的特征是并发和共享特征五、进程的状态与转换1. 进程的三种基本状态a. 运⾏状态:获得CPU的进程处于此状态,对应的程序在CPU上运⾏着b. 阻塞状态:为了等待某个外部事件的发⽣(如等待I/O操作的完成,等待另⼀个进程发来消息),暂时⽆法运⾏。

操作系统的基本原理与应用

操作系统的基本原理与应用

操作系统的基本原理与应用操作系统是一类重要的软件系统,它是管理计算机硬件和应用程序的系统软件。

作为计算机系统中最基本的软件,操作系统在计算机体系结构、软件设计和应用开发中扮演着非常重要的角色。

操作系统为计算机提供了资源管理、文件管理、进程管理、内存管理、设备驱动程序等功能。

本文将讨论操作系统的基本原理与应用。

一、操作系统的基本原理操作系统的基本原理包括以下几个方面:1. 进程管理进程是计算机系统中最基本的单元,也是操作系统必须管理的对象。

操作系统通过进程管理来维护系统中各个运行的进程,包括进程的创建、撤销、调度、同步等操作,以确保进程的正常运行。

2. 内存管理内存管理是操作系统中非常关键的一个部分,它的目的是管理内存资源,使得计算机系统中的各个进程都能得到足够的内存空间。

操作系统通过内存管理来实现内存的分配、回收、保护等操作。

3. 设备管理设备管理是操作系统中的一个非常重要的部分,它的目的是管理计算机系统中的各种设备,包括硬盘、打印机、键盘等。

操作系统通过设备管理来控制设备的访问、分配、协调、检测等操作。

4. 文件管理文件管理是操作系统中一个非常重要的功能,它的目的是管理计算机系统中各类文件,包括创建、删除、复制、移动等操作。

文件管理使得计算机系统中的文件能够被正确地组织和存储,方便用户使用。

二、操作系统的应用操作系统的应用非常广泛,包括以下几个方面:1. 个人计算机操作系统在个人计算机上的应用非常广泛,几乎所有的个人计算机都需要操作系统的支持。

操作系统为个人计算机提供了系统资源管理、应用程序启动、界面支持等功能,使得个人计算机的使用变得更加方便和高效。

2. 服务器系统服务器系统是指能够提供特定服务的计算机系统,如Web服务器、邮件服务器、数据库服务器等。

操作系统在服务器系统中的应用非常广泛,它通过进程管理、内存管理、设备管理等功能来保证服务器的正常运行。

3. 嵌入式系统嵌入式系统是指集成了计算机技术的各种设备和系统,如手机、数字电视、智能家居等。

计算机操作系统的功能与特点

计算机操作系统的功能与特点

计算机操作系统的功能与特点计算机操作系统是一种软件,它具有多种功能和特点,为计算机提供了必要的支持和管理。

下面将介绍计算机操作系统的主要功能和特点:1. 资源管理:计算机操作系统能够对计算机的硬件资源进行有效的管理和分配,包括处理器、存储器、输入输出设备等。

它可以根据应用程序的需求,合理地分配和调度各种资源,提高整个系统的运行效率和性能。

2. 进程管理:操作系统能够管理和控制计算机中的进程,包括创建、撤销、暂停、恢复等操作。

通过进程调度算法,它可以合理地分配处理器时间,确保各个进程能够得到公平的执行机会,实现多道程序的并发执行。

3. 存储管理:操作系统能够管理计算机的内存空间,包括分配、释放、保护等操作。

它可以为应用程序提供合适的内存空间,避免内存溢出或内存泄漏的问题,确保系统的稳定和安全。

4. 文件管理:操作系统能够管理计算机中的文件和目录,包括创建、读取、写入、删除等操作。

它可以为用户提供文件的访问和管理接口,实现文件的共享和保护,方便用户进行数据的存储和检索。

5. 设备管理:操作系统能够管理计算机中的各种设备,包括输入设备、输出设备、存储设备等。

它可以为应用程序提供统一的设备访问接口,简化设备的管理和控制,提高系统的可靠性和可用性。

计算机操作系统具有以下特点:1. 并发性:操作系统能够同时处理多个应用程序和用户的请求,实现多道程序的并发执行。

它能够有效地利用计算机的资源,提高计算机的利用率和系统的吞吐量。

2. 共享性:操作系统能够为多个应用程序和用户提供共享的资源,包括内存、文件、设备等。

它通过合理的资源分配和调度机制,确保各个应用程序能够公平地使用共享资源,提高系统的资源利用率。

3. 虚拟性:操作系统能够为应用程序提供虚拟的计算机环境,使每个应用程序都感觉自己独占了整个计算机的资源。

通过虚拟内存、虚拟文件系统等机制,它可以将有限的计算机资源分配给多个应用程序,提高系统的整体性能和可扩展性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告试验一:进程创建与撤销计科112康岩岩2011008142202013/4/10实验一:进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。

二、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通用户身份认识windows的进程管理。

通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言VC++/Java/C#的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。

三、实验步骤1、windows的进程管理以下是win7的人物管理器,可以进行进程的查看、创建、撤销等操作,由于操作比较简单与琐碎,这里不再具体描述。

2、VC++/Java/C#的进程创建与撤销工具对于本次试验,我使用C#进行进程创建、撤销等测试,具体内容在下面给出。

3、进程创建与撤销的模拟实现(1)总体设计:此次程序完全由c#实现,能够通过窗体界面详细地生动地显示进程的运行状态。

下面一步一步的进行实现①数据定义:类PCB的定义如下:class PCB{string pcbName; //进程名int pcbId; //IDlong startTime; //开始时间long pcbRuntime = 0; //运行时间int pcbLeve; //线程优先级}对于所有的进程信息,用以下表储存:Dictionary<int,Hashtable>ThreadTable=new Dictionary<int,Hashtable>();容器ThreadTable用来储存所有进程简直key 表示进程id,值为Hashtable,储存的为线程信息,②函数CREATE(PCB pcb)—进程创建:创建进程需要传入一个PCB 对象,然后启动一个单独的线程来操作该对象,操作该对象就是把线程运行的状态传送给PCB同时PCB也唯一地标示其所在的线程。

一个PCB对象的创建可通过一个与使用这交互的界面实现,使用者在交互窗体上输入进程名称,优先级,然后根据输入创建相应对象;killProcess(int id)—进程终止:由于每个进程都具有不用的pcbid,所以要结束一个进程需要将其id作为参数传入,在窗体应用程序上,使用者只需选中进程列表总相应进程后,即可选择执行中止函数。

③主界面设计:利用C#的各种控件可以很方便地设计出界面,界面截图如下:2-运行界面(2)详细设计:此程序主要是用来实现进程的创建与撤销以及进行进程状态的实时显示,这一系列通过界面的交互操作来完成。

由于本程序需要用C#来进行实现,关于进程的创建及界面操作都具有其语言特色,比如需要用到事件、托管之类。

创建线程的函数如下,其中参数有交互窗体产生,主要包括进PcbName、PcbId及创建时间private void createProcess(PCB pcb) {//启动的线程函数为runParameterizedThreadStart ParStart = newParameterizedThreadStart(run);hread thread = new Thread(ParStart);//设置pcb的起始时间为当前时间pcb.StartTime = DateTime.Now.ToFileTime();Hashtable hash=new Hashtable();//将线程信息和pcb信息存入hash表hash.Add("thread",thread);hash.Add("pcb",pcb);//将hash表存入记录线程状态的总表this.ThreadTable.Add(pcb.PcbId,hash);thread.Start(pcb); //启动线程}run 函数定义如下/// <summary>/// 线程运行的函数/// </summary>/// <param name="o">具有唯一pcbid的PCB对象,用来标示线程,也用来显示储存线程运行状态</param>private void run(object o) {//定义委托,用来调用函数显示某一进程的状态GetNowFileTimeCallBack call = new GetNowFileTimeCallBack(updatePcbListTime);PCB pcb = (PCB)o;int pcbId = pcb.PcbId;while (true) {//得到运行时间ong runtime = DateTime.Now.ToFileTime() - pcb.StartTime;//回调信息his.BeginInvoke(call, pcbId, runtime);try {Thread.Sleep(1000);}catch (Exception e) { }}}在run函数中有句代码如下:this.BeginInvoke(call, pcbId, runtime);此句代码回调了两个参数给updatePcbListTime,分别是进程的PcbId即当前线程的运行时间,有了这连个参数便可以在主界面上更新进程运行的时间,这个操作设计到c#对控件的有关操作,这里不再详细介绍,后面在源代码中会给出。

进程的撤销:使用着在进程列表中选择一项进程,直接点击“结束进程”按钮即可,结束进程的函数如下:private void killProcess(int id){//根据id从进程信息表中得到进程信息Hashtable h=ThreadTable[id];Thread t=(Thread)h["thread"];//得到id对应的线程try{if (t != null && t.IsAlive) {t.Abort(); //停止线程}}catch (Exception e) {MessageBox.Show(e.Message);}ThreadTable.Remove(id); //信息表中删除线程数据romoveListViewItem(id); //界面列表中删除数据his.ProcessCount = ThreadTable.Count; //更新进程数目}以上便是进程撤销的函数,由于涉及到界面更新等操作,所以略显复杂了一些。

四、实验总结用C#进行线程的创建与撤销代码相对来说比较简单,因为封装比较多,我们能做的就是创建与调用。

当然,代码中也有一些复杂的地方,不是对线程的操作,而是关于界面的显示与操作,单个线程容易创建与撤销,但难的是合理的“监控”与组织多个线程并及时进行状态的显示。

本来想过用C语言在控制台上完成这次试验,但考虑到控制台的交互性太差,而且C语言代码相对复杂,最后还是放弃了。

虽然用程序语言实现了进程创建(当然,这是在并不会理论的情况下),但还是没弄清理论的实质。

可能理论更抽象些吧。

在平常的编程中,虽然经常遇到过要使用多线程的问题,但没有去试过从操作系统的角度去考虑线程的运行,在以后的学习中,我想还是会深入了解与学习这方面的东西的。

五、附录PCB类的定义:class PCB{string pcbName; //进程名int pcbId; //IDlong startTime; //开始时间long pcbRuntime = 0; //运行时间 int pcbLeve; //线程优先级public string PcbName{get { return pcbName; }set { pcbName = value; }}public int PcbId{get { return pcbId; }set { pcbId = value; }}public long StartTime{get { return startTime; } set { startTime = value; } }public long PcbRuntime{get { return pcbRuntime; } set { pcbRuntime = value; } }public int PcbLeve{get { return pcbLeve; }set { pcbLeve = value; }}}主窗体(包含所有操作):using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;using OsTest.os.boject;using OsTest.os.form;using System.Collections;namespace OsTest{public partial class MainForm : Form{public MainForm(){InitializeComponent();}private void button2_Click(object sender, EventArgs e){if(this.listView1.SelectedItems.Count<1){return;}killProcess(this.selectId);}private void killProcess(int id){//根据id从进程信息表中得到进程信息Hashtable h=ThreadTable[id];Thread t=(Thread)h["thread"];//得到id对应的线程try{if (t != null && t.IsAlive){t.Abort(); //停止线程}}catch (Exception e) {MessageBox.Show(e.Message);}ThreadTable.Remove(id); //信息表中删除线程数据romoveListViewItem(id); //界面列表中删除数据this.ProcessCount = ThreadTable.Count; //更新进程数目}int processCount = 0;public int ProcessCount{get { return processCount; }set {processCount = value;this.toolStripStatusLabel1.Text = "进程数:" + processCount;}}/// <summary>/// 根据进程id删除列表中相对于的进程信息/// </summary>/// <param name="id">进程id</param>private void romoveListViewItem(int id) {//锁定列表控件,避免多个线程同时操作lock (this.listView1){foreach (ListViewItem li in this.listView1.Items){int liId = int.Parse(li.SubItems[1].Text.ToString());if (liId != id){continue;}li.Remove();return;}}}/// <summary>/// 用于存放进程数据的表/// </summary>private Dictionary<int,Hashtable> ThreadTable=new Dictionary<int,Hashtable>();private void createProcess(PCB pcb) {//启动的线程函数为runParameterizedThreadStart ParStart = new ParameterizedThreadStart(run);Thread thread = new Thread(ParStart);//设置pcb的起始时间为当前时间pcb.StartTime = DateTime.Now.ToFileTime();Hashtable hash=new Hashtable();//将线程信息和pcb信息存入hash表hash.Add("thread",thread);hash.Add("pcb",pcb);//将hash表存入记录线程状态的总表this.ThreadTable.Add(pcb.PcbId,hash);thread.Start(pcb); //启动线程}private delegate void GetNowFileTimeCallBack(int pcbId,long now);/// <summary>/// 更新显示进程列表的窗口/// </summary>/// <param name="pcbId"></param>/// <param name="now"></param>private void updatePcbListTime(int pcbId,long now){foreach(KeyValuePair<int,Hashtable> p in ThreadTable){PCB pcb=(PCB)p.Value["pcb"];if(pcb.PcbId==pcbId){pcb.PcbRuntime = now;//更新运行时间updateListView(pcb);break;}}}/// <summary>/// 更新列表控件/// </summary>/// <param name="pcb"></param>private void updateListView(PCB pcb) {lock (this.listView1){foreach (ListViewItem li in this.listView1.Items){int liId = int.Parse(li.SubItems[1].Text.ToString());if(liId!=pcb.PcbId){continue;}li.SubItems[3].Text=(pcb.PcbRuntime / 10000000) + "s";return;}ListViewItem newLi = new ListViewItem(pcb.PcbName);newLi.SubItems.Add(pcb.PcbId + "");newLi.SubItems.Add(pcb.PcbLeve + "");newLi.SubItems.Add(pcb.PcbRuntime / 10000000 + "s");this.listView1.Items.Add(newLi);this.ProcessCount = ThreadTable.Count;}}/// <summary>/// 线程运行的函数/// </summary>/// <param name="o">具有唯一pcbid的PCB对象,用来标示线程,也用来显示储存线程运行状态</param>private void run(object o) {//定义委托,用来调用函数显示某一进程的状态GetNowFileTimeCallBack call = new GetNowFileTimeCallBack(updatePcbListTime);PCB pcb = (PCB)o;int pcbId = pcb.PcbId;while (true){//得到运行时间long runtime = DateTime.Now.ToFileTime() - pcb.StartTime;//回调信息this.BeginInvoke(call, pcbId, runtime);try{Thread.Sleep(1000);}catch (Exception e) {}}}/// <summary>/// 关闭窗口/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MainForm_FormClosing(object sender, FormClosingEventArgs e){ToolStripMenuItem2_Click(sender,e);}/// <summary>/// 点击菜单的新建按钮,创建进程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ToolStripMenuItem1_Click(object sender, EventArgs e){CreateForm cf = new CreateForm();//显示创建PCD对象的窗体if (cf.ShowDialog(this) == DialogResult.OK){PCB pcb = cf.Pcb; //得到对象createProcess(pcb); //创建进程}}int selectId = 0;private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e){selectId=int.Parse(e.Item.SubItems[1].Text.ToString());}/// <summary>/// 退出程序/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void ToolStripMenuItem2_Click(object sender, EventArgs e){System.Environment.Exit(0);}}}。

相关文档
最新文档