多道程序设计和分时系统

我们已讨论了计算机系统的基本组成和体系结构,现在讨论操作系统。操作系统为执行程序而提供环境。操作系统可以通过许多不同方式来构建,因此内部组织差异很大。不过,它们也有许多共同点,这里将会加以讨论。

多道程序设计(multiprogramming)

操作系统最重要的一点是具有多道程序能力。一般来说,单个程序并不能让 CPU 和 I/O 设备始终忙碌。单个用户通常具有多个运行程序。多道程序设计(multiprogramming)通过安排作业(编码与数据)使得 CPU 总有一个执行作业,从而提高 CPU 利用率。

操作系统在内存中同时保存多个任务(图 1)。由于主存太小不能容纳所有作业,因此这些作业首先保存在磁盘的作业池(job pool)上。该作业池包括磁盘上的、等待分配内存的所有进程。

多道程序系统的内存分布
图 1 多道程序系统的内存分布

内存的作业集为作业池的作业集的一个子集。从内存的作业集中,操作系统可以选择执行一个作业。最终,该作业可能需要等待某个任务,如 I/O 操作的完成。对于非多道程序系统,CPU 就会空闲;而对于多道程序系统,CPU 就会简单切换到另一个作业,以便执行。当该作业需要等待时,CPU 会切换到另一个作业,等等。最终,第一个作业完成等待并重新获得 CPU。只要有一个任务可以执行,CPU 就不会空闲。

这种做法在日常生活中也常见。例如,一个律师在一段时间内不只为一个客户工作。当一个案件需要等待审判或需要准备文件时,该律师可以处理另一个案件。如果有足够多的客户,那么他就决不会因没有工作要做而空闲。

多道程序系统提供了一个环境,以便充分使用各种系统资源(如 CPU、内存、外设),但是没有提供用户与计算机系统的交互。分时系统(time sharing)(或多任务(multitasking))是多道程序设计的自然延伸。对于分时系统,虽然 CPU 还是通过切换作业来执行多个作业,但是由于切换频率很高,用户可以在程序运行时与其交互。

分时系统(time sharing)

分时系统要求计算机系统是可交互(interactive)的,以便用户与系统直接通信。用户通过输入设备,如键盘、鼠标、触摸板、触摸屏等向操作系统或程序发出指令,并等待输出设备的即时结果。相应地,响应时间(response time)应当较短,通常小于 1 秒。

分时操作系统允许许多用户同时共享一台计算机。由于分时系统的每个动作或命令往往较短,因而每个用户只需少量 CPU 时间。随着系统从一个用户快速切换到另一个用户,每个用户都会感到整个系统只为自己所用,尽管它事实上为许多用户所共享。

分时操作系统采用 CPU 调度和多道程序设计,为每个用户提供一小部分的分时计算机资源。每个用户至少有一个程序在内存中。加载到内存并执行的程序,通常称为进程(process)。当进程执行时,它通常在执行较短的一段时间后,要么完成,要么需要进行 I/O 操作。

I/O 可以是交互的,即输出是到用户显示器,输入来自用户键盘、鼠标或其他设备。由于交互 I/O 通常按人类速度(people speed)来进行,因此可能需要很长时间完成。例如,输入通常受限于用户打字速度,每秒 7 个字符对人类来说可能很快,但是对计算机来说太慢了。在用户进行交互输入时,操作系统为了不让 CPU 空闲,会将 CPU 切换到其他用户程序。

分时系统和多道程序需要在内存中同时保存多个作业。如果有多个作业可以加载到内 存,同时内存太小而不能容纳所有这些作业,那么系统就应做出选择(这个决定涉及作业调度(job scheduling),将在后续章节中介绍)。操作系统从作业池中选中一个作业,并将它调入内存以便执行。内存同时保存多个程序,这需要一定形式的内存管理。

另外,如果有多个任务同时等待执行,那么系统应当做出选择。做出这样的决策称为 CPU 调度(CPU scheduling)。最后,在多个作业并发执行时,操作系统的各个阶段,如进程调度、磁盘和内存管理,应能限制作业之间的互相影响。这些讨论贯穿本教程。

对于分时系统,操作系统必须确保合理的响应时间。这有时可以通过交换(swapping)来得到,交换可将进程从磁盘调入内存,也可将进程从内存调到磁盘。不过,虚拟内存(virtual memory)是实现合理响应时间的更为常用的一种方法,虚拟内存允许一个执行作业不必完全在内存中。

虚拟内存的主要优点是,用户可执行比物理内存(physical memory)大的程序。再者,它将内存抽象成一个庞大的、统一的存储数组,将用户理解的逻辑内存(logical memory)与真正的物理内存区分幵来。这种安排使得程序员不受内存空间的限制。

分时系统也应提供文件系统。文件系统驻留在一组磁盘上,因此 也应提供磁盘管理。另外,分时系统需要提供机制,以便保护资源并防止不当使用。为了确保有序执行,系统必须提供机制,以便实现作业的同步和通信;它也可确保作业不会进入死锁,进而永远互相等待。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


随着云计算和网络技术的发展,越来越多的数据需要在服务器之间进行传输和共享。云挂机宝作为一种常见的服务器设备,具有高效、稳定的特性,使得它成为了许多企业和个人用户传输数据的首选。本文将讨论云挂机宝服务器
阿里云服务器Tomcat无法从外部访问一、环境阿里云Ubuntu 12.04.5 LTStomcat和java都是阿里云默认的7的版本,如下图二、问题部署后./startup.sh启动tomcat 之后外部访问http://ip:8080/无法访问,之后去查看防火墙关闭了Ubuntu下面的防火墙123
购买一系列的东西其实就是花钱买块区域,服务器,域名,云解析,花了好多money。。。一、租服务器百度搜索阿里云进入官网首页,点击登录进入登录页面,可以使用邮箱登录或者注册进入注册页面,填写注册信息登录成功,进入主页,点击云服务ECS,点击购买推荐或者选购配置根据实际情况选择产品,可能没有货,那么就需要更改购买条件如果是新用户,购买
前言昨天买了域名,服务器,然后搭建了环境,然后想他通过默认的端口,不用端口就访问。设置WEB项目的欢迎页在WEB-INF文件夹下有个web.xml文件(最近新建的项目不包含此文件,可以手动新建),在welcome-file-list节点中设置,代码如下 <welcome-file-list> <welcome-file>test.html</welcome-file>
前言由于服务器centos6.8安装mysql一直出现不能连接问题,然后看到一个方法,一不小心就把yum给删除了,都还原不了,很是绝望,很难受。然后没有yum这个centos就感觉废了,然后找方法装上去。 python --version查看python 版本 whereis python 查看python文件 python: /usr/bin/python2.6 /usr/bin/python
前言用 SSH客户端登录上以后,自己想要在本地连接服务器上的mysql服务器。解决方法1、首先启动数据库[root@iZm5ec880z2rorZ ~]# service mysqld start可以输入一下加粗命令:[root@iZm5ec880z2rorZ ~]# mysql -u root -p Enter password: (输入你的数据库密码)Welcome to the My
前言乱码问题是很让人抓狂的问题,下面我将记录一下Linux下MySQL乱码问题的解决方法。 mysql在linux下乱码问题一、操作mysql默认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改mysql的字符集了。1)查看默认编码show variables like 'character%';+--------------------------+--------
问题描述今天阿里云服务器安装mysql的收,遇到了一个很熟悉的问题 输入#mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 解决方案一、方案1 1.#ps -A|grep mysql 显示类似:
今天在使用filezilla连接虚拟机中的ubuntu的时候出现上次出错,错误详情为:open for write: permission denied看完错误大概知道和权限有问题,再次查看虚拟机,我们使用以下命令给我们需要放入的目标文件权限:sudo chmod 777 /home再次尝试上传,上传成功! ...
直接上步骤,做一个简单的记录!配置阿里云oss找到对应的oss如果没有bucket,则新建一个新建之后,进入到对应的bucket,然后进行相关设置以上就是oss的基本设置,接下来是域名相关设置,这也是最重要的一些步骤。oss域名解析和cdn设置oss域名解析设置oss的域名设置是在传输管理下进行设置。如果没有域名,需要添加域名,没有注册域名自行注册。添加之后就会在上面列表上显示。以上就是域名的解析配置,期间还需要设置域名解析cname等。oss的cdn设置加速设置cdn
这个需要开放centos的端口和腾讯云服务器的端口。防火墙开放8080端口因为Centos7以上用firewalld代替了iptables,也就是说firewalld开通了8080端口应该就行了1.输入netstat -tunlp 查看8080是否放开。2.如果没有开放,输入firewall-cmd --state #查看防火墙状态。3.在running 状态下,向firewall 添加需要开放的端口firewall-cmd --permanent --zone=public --add-po
前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkins + Ant + Tomcat 搭建了一个自动发布部署的环境
为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启 tomcat 之前先检查 tomcat 进程有没有停掉,没有还要手动 kill 该进程。 发布次数多了,操
Jenkins修改管理员密码,我看了网上所有的教程,竟然全都是拿着一串已经加密好的 111111 的密文去替代 config.xml 文件里面的密码,然后大家的密码都是 111111!我觉得这种做法实
一、四层与七层负载均衡在原理上的区别 1.图示 2.概述 四层负载均衡工作在 OSI 模型中的四层,即传输层。四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体
和 window不同,在Linux压缩文件需要注意的是,压缩后的文件会把源文件给替代,无论是gzip、bzip2、xz 均不支持压缩目录,要达到压缩目录的目的,需要用到tar指令。 gzip 压缩 g
一、前言 随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。而且,
一、安装 和 准备工作 我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列
一、gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接。 gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行
随着智能化互联时代的来临,家中的智能设备越来越多:电视机、平板、游戏主机、电脑、手机等遍及家中各个角落,同时设备之间共享数据的需求变的越来越强烈。比如同步、备份手机上的照片和视频,在电视机上观看电脑中