深入理解计算机系列06

操作系统发展概述

白话来讲,操作系统分为以下的一些发展进程

1.手工操作系统或者叫没有操作系统,可以理解为简单粗暴的卡片机

(注:批处理的含义,将一些程序和数据提前加载到内存,再做出专门的调度程序或者叫监督程序)
2.单道批处理系统,就弄了个磁带,像唱片一样,慢慢转,自动完成程序作业,问题那也是想当明显——只能按顺序一步步走,而且一次只能一道程序,称为串行

3.多道批处理系统,CPU的工作速度更加快速,但是I/O很慢,所以在I/O输出的时候,CPU继续进行计算,这样的时间级别往往是ms级别的,所以宏观看起来就像是多个程序一起执行一样,称为并行
但是多道批处理系统的用户交互是很差的,往往是埋头苦干,但是实际上,用户的需求在不断变化的,操作系统应该相应作出调整

4.分时操作系统多个用户通过终端同时共享一台主机,把运行时间分成很短的时间片(一般也是ms级别,用户很难察觉),轮流给各联机作业使用,就是把处理器按照固定的时间片分给大家用,你时间到期了我就换人,此时你可以键入命令,下次我来的时候就按你的要求来。同时每个用户都是相互独立,他们键入的命令互不干扰,这有一个比较古老的时间片轮转调度算法

5.实时操作系统提供用户命令的优先级(引入了中断和严格中断时间),但是因此CPU的利用率下降

6.网络操作系统+分布式计算机系统

7.个人操作系统

现代操作系统的几个概念

并发:指两个或者多个事件在同一时间间隔发生
共享:指系统中资源可供内存中多个并发执行的进程共同使用
虚拟:把一个物理上的实体编程变为若干个逻辑上的对应物
异步:进程执行不是一贯到底,而是走走停停
我们把CPU的资源简单的理解为CPU的计算资源和占用时间
具体如下:
并发
由于多个程序要执行,所以必须并发,重点在于是同一时间间隔,宏观上是多道程序同时,微观上单处理机下依然只有一道程序执行,通过分时实现交替执行,所谓分时,就是大家轮流使用一段固定的时间(最基本的时间片轮转调度算法)
与并行区别:并行是真正意义的同时完成多个工作,需要硬件支持,比如多流水线等
共享:
分为互斥共享和同时共享
互斥共享,一段时间只能一个进程访问资源
同时共享,同时依然是宏观上的,微观上依然有可能是进程交替访问,只不过访问顺序不影响
虚拟
操作系统会通过一系列的映射规则将物理实体映射到虚拟空间中
异步
资源有限,尤其是I/O速度比CPU速度慢得多,所以大量的进程往往都不是一下就执行完,为了实现效率最大化,进程往往是走走停停地执行


异常控制流

从开机到关机,处理器做的工作其实很简单,就是不断读取并执行指令,每次执行一条,整个指令执行的序列,称为处理器的控制流
到目前为止,我们已经学过了两种改变控制流的方式:
1.跳转和分支
2.调用和返回
当然,这局限于程序本身的控制,面对更加复杂的情况时,轮到另一种更加复杂的机制登场了,称之为异常控制流
———————————————————————————

进程

进程才是程序(指令和数据)的真正运行实例。之所以重要,是因为进程给每个应用提供了两个非常关键的抽象:一是逻辑控制流,二是私有地址空间。逻辑控制流通过称为上下文切换(context switching)的内核机制让每个程序都感觉自己在独占处理器。私有地址空间则是通过称为虚拟内存(virtual memory)的机制让每个程序都感觉自己在独占内存。这样的抽象使得具体的进程不需要操心处理器和内存的相关适宜,也保证了在不同情况下运行同样的程序能得到相同的结果。
图片来自不周山博客
左边是单进程的模型,内存中保存着进程所需的各种信息,因为该进程独占 CPU,所以并不需要保存寄存器值。而在右边的单核多进程模型中,虚线部分可以认为是当前正在执行的进程,因为我们可能会切换到其他进程,所以内存中需要另一块区域来保存当前的寄存器值,以便下次执行的时候进行恢复(也就是所谓的上下文切换)。整个过程中,CPU 交替执行不同的进程,虚拟内存系统会负责管理地址空间,而没有执行的进程的寄存器值会被保存在内存中。切换到另一个进程的时候,会载入已保存的对应于将要执行的进程的寄存器值。

进程控制 Process Control
系统调用的错误处理
附:
系统调用和函数调用的区别:
系统调用
1.使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备
2.依赖于内核,不保证移植性
3.在用户空间和内核上下文环境间切换,开销较大
4. 是操作系统的一个入口点
函数调用
1.使用CALL和RET指令,调用时没有堆栈切换
2.平台移植性好
3.属于过程调用,调用开销较小
4.一个普通功能函数的调用
每一个系统调用都有一个唯一的ID,而我们介绍的重点fork()函数,就是这样一个系统调用级别的函数而异常的具体实现就是依靠在用户代码和内核代码间切换而实现的
—————————————————————————————

fork()函数解析

fork函数创建进程,用于多进程编程,会产生子进程,多个进程同时完成N个事情
fork函数调用一次返回两次(在新创建的进程返回一次,在调用fork的进程中返回一次,新进程返回0,调用fork的进程(原来的进程即父进程)返回子进程的pid)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值