• 操作系统之哲学原理


    硬件基本知识

    总线结构:所有设备挂在总线上,通信均需通过总线,外部设备通过其控制器与CPU通信。

    流水线结构:仿照工业流水装配线,将计算机的功能部件分为多个梯级,并将计算机的每条指令拆分为同样多个步骤,使每条指令在流水线上流动。

    为了进一步提高计算机的效率,在流水线的基础上又发明了多流水线、超标量计算和超长指令字等多指令发射机制。这些机制的发明也极大地增加计算机结构的复杂度,并对操作系统和编译器提出了更高的要求。

    从寄存器到磁带,每一级存储媒介的访问延迟和容量依次增大,而价格却依次降低。通过合理搭配,可以形成一个性价比颇高的存储架构。

    中断是计算机里一个最为重要的机制,它是操作系统获得计算机控制权的根本保证。它的基本原理是设备在完成自己的任务后向CPU发出中断请求,CPU判断优先级,然后确定是否响应。如果响应,则执行中断服务程序,并在中断服务程序执行完后继续执行原来的程序。中断是一个很复杂的过程,中断处理过程中又可以发生中断,且还可以有所谓的软中断,即软件发出的中断。

    内核态和用户态

    如果程序运行在内核态,则该程序就可以访问计算机的任何资源,即它的资源访问不受限制。如果一个程序运行在用户态,则其资源需求将受到各种限制。由于内核态的程序可以访问计算机的所有资源,因此这种程序的可靠性和安全性就显得十分重要。

    一般说,一个程序尽可能地运行在用户态,只有在迫不得已的情况下,才运行在内核态。凡是牵扯到计算机本体运行的事情都应该在内核态下执行,比如CPU的管理和内存管理、诊断与测试程序等。另外,对时序要求特别高的操作,也应该在内核态完成。

    对于文件系统来说,用户数据的管理放在用户态,文件系统本身的管理放在内核态。

    进程、内存、文件

    操作系统对进程的管理通过进程表来实现。进程表里存放的是关于进程的一切信息。在任何时候,进程所占有的全部资源形成一个进程核core。核快照core image代表的是进程在某一特定时刻的状态。

    如果在Linux或Unix操作系统下编写程序,在出现分段错误时,操作系统会自动进行核倒出core dump。核倒出把所有计算机的状态保存在一个文件中,通过阅读这个文件的内容可以得知溢出时进程状况,从而帮助调试程序。

    进程与进程之间可以通信、同步、竞争,并在一定情况下可能形成死锁。

    系统调用

    系统调用按照功能可以划分为六大类:

    • 进程控制类
    • 文件管理类
    • 设备管理类
    • 内存管理类
    • 信息维护类
    • 通信类

    系统调用分为3个阶段:

    • 参数准备阶段
    • 系统调用识别阶段
    • 系统调用执行阶段

    用户程序通过调用操作系统提供的系统调用API来获得操作系统的各种服务。但使用API需要编程。为了向这些不编程的用户提供服务,操作系统提供了一个壳shell来与用户交互。这个壳是覆盖在操作系统服务上面的一个用户界面,可以是图形界面,也可以是文本界面。

    Unix和Linux:壳是文本形式;只需要运行shell即可;可以同时启动多个壳

    Windows:可同时启动多个文本命令壳Powershell;只能启动一个图形界面壳explore.exe

    fork和execve是Unix操作系统提供的系统调用。fork的功能是创建一个子进程,并将自己的一切数据复制到子进程里。execve的功能是用另外一个程序的内容覆盖自己,即执行新的程序。

    fork命令有两次返回:一次返回值为0,表明是子进程;另一次返回值不为0,表明是父进程,而返回值就是子进程的进程ID。因为fork的特殊功能使然,在fork完成后,我们面对的是两个进程,而这两个进程的程序代码完全一样。

  • 相关阅读:
    yii2美化url
    Android 百度地图API 定位 导航
    辛星浅谈PHP的混乱的编码风格
    html5非常火,他究竟与html4有何差别?
    Cocos2d-x 3.0心得(01)-图片载入与混合模式
    解读BOM与COM
    HDU 1718 Rank counting sort解法
    汉语转拼音pinyin4j
    UVALive-6656-Watching the Kangaroo(二分)
    thinPHP中多维数组的遍历
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/14653499.html
Copyright © 2020-2023  润新知