热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正襟危坐说操作系统(壹):操作系统概述及历史

概述:操作系统协调各任务公平分享CPU。所谓的操作系统隐藏在各任务和中断背后,在系统运行时,并不以独立的形式存在,没有自己

概述:

操作系统协调各任务公平分享CPU。所谓的操作系统隐藏在各任务和中断背后,在系统运行时,并不以独立的形式存在,没有自己的执行线程。就像赛场外的裁判,只是协调整个比赛过程,而不亲自参与比赛,由运动员自己进行比赛。什么时候这个裁判才起作用呢?当系统时钟中断或系统调用时,操作系统代码才会出面协调任务的进行。而中断处理在某些方面超出了系统软件的管理范围,而由CPU硬件触发,比所有任务都优先执行。中断处理以外剩余的CPU时间,由各任务依据优先级设置、资源分配和执行流程来共同分享。

在系统运行时,除了任务中断这样的动态运行对象外,还存在一些静态对象,如调度机制、任务间通信机制、内存管理机制和输入输出系统等。这里所讲的静态是相对的,指这些对象代码没有自主的执行线程,总处于被动的调用状态。调用时对内存中的分配的静态数据结构进行操作,有时也改变任务的运行状态。

 

操作系统在计算机运行过程中扮演的角色:魔术师管理者

魔术师隐藏了背后的复杂,把差的东西变好,把少的东西变多,把复杂的东西变得容易。

操作系统通过进程抽象让每个用户感觉到有一台自己独享的CPU;通过虚拟内存的抽象,让用户感觉到物理内存空间具有无限扩张性。

管理者则针对所有计算机资源进行管理以达到公平和效率的“双料”境界。操作系统对CPU、内存、磁盘等的管理,使得不同用户之间或者同一用户的不同程序之间可以安全有序的共享这些硬件资源。

 

历史:

操作系统Operating Systems指的就是掌控局势的一种系统。掌控的是计算机或计算机里发生的一切事情。最原始的计算机并没有操作系统,而是直接由人来掌控事情,即所谓的单一控制终端、单一操作员模式。但随着计算机的复杂性的增长,人已经不能胜任直接掌控计算机了。于是我们编写出OS这个软件来掌控计算机,将人类从日益复杂的任务中解脱出来。由于计算机的功能和复杂性不断发生变化,操作系统锁掌控的事情也就越来越多,越来越复杂。同时操作系统本身能够使用的资源也不断增多。

操作系统的不断发展与改善由两个因素驱动:

1,硬件成本的不断下降

2,计算机的功能和复杂性的不断变化

 

第一阶段:单一操作员、单一控制端操作系统(20世纪40年代)

代表机型是ENIAC。此时没有操作系统的整体概念,唯一想到的就是提供一些标准命令供用户使用,这些标准命令集合就构成我们原始的操作系统SOSC(单一操作员、单一控制终端 single operator,singleconsole)。

SOSC操作系统的设计就是满足基本的功能,并提供人机交互。在这种操作系统下,操作系统本身只是一组标准库函数而已。操作系统不自我运行,而是等待操作员输入命令再运行。用户想使用什么服务,就直接在命令行键入代表该服务的对应操作系统的库函数名即可。

 

第二阶段:批处理操作系统(20世纪50年代)

SOSC效率之所以低下,是因为计算机总是在等待人的下一步动作,而人的动作总是很慢。因此,如果将人的因素拿走,让所有人先想好自己要运行的命令,列成一个清单,打印在纸带上,然后交给一个工作人员来一批一批地处理,效率不就提高了么。

批处理操作系统针对的是第二代通用计算机,如IBM的1401和7094等,通过去除人机交互达到CPU和输入输出利用率的改善

在SOSC环境下,每个用户自己控制程序的开始和结束。而在批处理下,很多用户的程序一个接一个地存放在磁带上,用户本人无法控制程序的开始和结束。而这个任务就交给了批处理操作系统。整个批处理操作系统是由批处理监视器和原来的操作系统库函数组成。

此种操作系统的任务就是加载一个程序、运行、打印结果,然后执行下一个程序。

 

第三代:多道批处理操作系统(20世纪60年代)

虽然批处理操作系统通过无需人机交互过程而在一定程度上提高了计算机的效率,但还是不那么令人满意。因为,CPU和输入输出设备的运行是串行的,即在程序进行输入输出时,CPU只能等待。CPU需要不断地探询I/O是否完成,因而不能执行别的程序。(磁带上的程序要先读进来,程序才能执行,执行完了又需要写到另一个磁带上。读写磁带的时候CPU是不工作的,这就是很大的浪费。)

能否将CPU和I/O进行并发呢?即在一个程序输出结果时,让另一个程序继续执行。CPU和I/O重叠需要我们将多个程序同时加载到计算机内存里(以前是加载一个程序,执行,输出,再加载下一个程序),从而出现了多道批处理系统。

由于多个程序同时执行,操作系统需要能够在多个程序之间进行切换,并且能够管理多个输入输出设备,同时还要能够保护一个进程不受另一个进程干扰。此时的操作系统要复杂的多:即要管理工作,又要管理内存,还要管理CPU调度。

 

第四代之一:分时操作系统(20世纪70年代)

多道批处理操作系统的出现使计算机的吞吐率大大提高,但是另一个问题,将程序制作在卡片上交给计算机管理员统一运行,将使用户无法立即获知程序运行的结果。

能否让人回到计算机前面来,每个人自己管理自己的程序,大家的程序可以同时运转。人的因素又引了回来。这看上去与原始的SOSC似乎一样,但有很多关键不同:多人同时连在计算机上,每个人是一个I/O终端而已,终端显示器只能接收和发送有限的文本命令和信息。计算机在所有连接的终端用户之间进行分时,即分给每个人有限的时间,只要时间到了,就换一个进程

在分时操作系统下,任意时间可以运行多个程序,用户直接与计算机交互,可当场调试程序。SOSC是一切等着人,执行一条命令就等人,分时系统是人等机器。机器不用再等你,当你想问题的时机器就切换到别的程序,等你想完了机器再切换回来,接受你的输入。

因为机器昂贵,我们不能容忍机器(CPU)在I/O设备工作期间闲置下来。同时,因为人的时间宝贵,我们不能容忍人们在机器面前漫长等待。因此,我们发明了分时操作系统来解决这两个问题。因为分时而引入的多道程序设计,又造成操作系统的空前复杂,我们需要应对竞争、通信、死锁、保护等一系列的新功能。

 

之二:实时操作系统

使用计算机对某些工业进程进行监视,并在需要的时候采取行动,这种对计算机响应时间有要求的系统通常称为临界系统或应用。为了满足这些应用对响应时间的要求,人们就开发了实时操作系统。实时操作系统是指所有任务都在规定时间内完成的操作系统,即必须满足时序可预测性。显然,实时操作系统的最重要部分是进程调度。只有精确、合理和及时的进程调度才能保证响应时间。

 

第五代:现代操作系统(1980年以后)

随着硬件越来越便宜,个人机出现了。人们可以拥有自己的电脑,无需与别人分享。由于个人机由用户一个人独享,分时操作系统的许多功能就无需存在。因此,个人操作系统又变回了标准库函数系统。(例如DOS)

但人们发现没有分时功能的操作系统使一些事情做不了。因为,虽然只有一个人在用机器,但这个人可能想同时想做好几件事。于是又将各种分时功能加了进去。于是Windows NT等就出现了。

 


推荐阅读
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 深入解析mt_allocator内存分配器(二):多线程与单线程场景下的实现
    本文详细介绍了mt_allocator内存分配器在多线程和单线程环境下的实现机制。该分配器以2的幂次方字节为单位分配内存,支持灵活的配置和高效的性能。文章分为内存池特性描述、内存池实现、单线程内存池实现、内存池策略类实现及多线程内存池实现等部分,深入探讨了内存池的初始化、内存分配与回收的具体实现。 ... [详细]
  • APP及其接口测试全面解析
    本文深入探讨了移动应用(APP)及其接口测试的关键点,包括安装与卸载、功能一致性、系统兼容性、权限管理等多个方面的测试策略,以及针对接口的功能、边界值、参数组合等专业测试方法。同时,介绍了几款常用的测试工具,帮助开发者提高测试效率和质量。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • 本文详细探讨了32位与64位操作系统的区别,包括设计目的、硬件需求、性能表现、内存管理和软件生态等方面,旨在帮助用户更好地理解两种系统的特点及适用场景。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • Lua字符串1.字符串常见形式字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua语言中字符串可以使用以下三种方式来表示:•单引号间的一串字符。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Web开发实践:创建连连看小游戏
    本文详细介绍了如何在Web环境中开发一款连连看小游戏,适合初学者和技术爱好者参考。通过本文,您将了解游戏的基本结构、连线算法以及实现方法。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
author-avatar
黑衬衫1994
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有