一、冯诺依曼体系结构
现代计算机设计大都遵守冯·诺依曼体系结构:
截至目前,我们所认识的计算机,都是由一个个的硬件组件组成
-
输入单元:包括键盘, 鼠标,扫描仪, 磁盘,网卡等
-
存储器:内存(提高数据读写速度,降低硬件成本)
-
中央处理器(CPU):含有运算器(算数运算,逻辑运算)和控制器(分析指令并发出相应的控制信号)等
-
输出单元:显示器,打印机, 磁盘,网卡等
关于冯诺依曼,必须强调几点:
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能直接访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
- 一句话,所有设备都只能直接和内存打交道。
二、操作系统(Operating System)
2.1 基本概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。广义上,操作系统包括:
-
内核(进程管理,内存管理,文件管理,驱动管理)
-
其他程序(例如函数库,shell程序等等)
设计OS的目的
- 硬件交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境
操作系统如何管理软硬件
- 先描述:用struct结构体收录其所有的属性。(Linux内核是用C语言写的)
- 再组织:用链表或其他高效的数据结构将这些结构体组织起来,通过增删查改算法对软硬件进行管理。
定位
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件
2.2 系统调用及用户操作接口
系统调用
- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用(system call)。
- 系统调用在使用上功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库和shell程序。
提示:Linux内核是使用C语言写的,system call实际上就是用C语言写的函数。
用户调用接口
- 为了方便基本操作,将部分系统调用封装成shell程序或图形用户界面,使用户通过简单的指令或动作就可以对计算机的软硬件进行操作。
- 为了方便编程开发,对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
2.3 shell——命令行解释器
外壳程序
- Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
- Windows系统也同样由 内核 + 外壳程序(Windows GUI) 构成。对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口(GUI),进行移动鼠标点击等动作,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
- shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。内核运行出结果再通过shell解析给用户。
广义上,Linux系统 = Linux内核(kernel)+外壳程序(shell)
狭义上,Linux系统 = Linux内核(kernel)
命令行解释器:shell
在Linux系统中接受用户输入并显示运行结果的程序是shell。shell即命令行解释器是Linux操作系统的外壳程序,他的功能如下:
- 传递请求,让内核执行命令;将内核处理的结果翻译给使用者。
- 保护内核
- 创建子进程来执行具有风险的事情。
centos系统中的命令行解释器:bash
- shell是命令行解释器的统称,而bash只是其中之一。
- bash本身在系统中就是一个进程。