[Linux]从硬件到软件理解操作系统

目录

前言

一、冯诺依曼体系结构

1.基本讲解

2.关于内存的注意事项

3.CPU

4.程序运行必须加载到内存

二、操作系统

三、系统调用

1.银行与操作系统

2*.系统调用和库函数概念

四、用户操作接口

五、总结


前言

在进行讲解之前,我们先统揽全局


一、冯诺依曼体系结构

1.基本讲解

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。现代计算机发展所遵循的基本结构形式始终是冯·诺依曼机结构。

冯洛伊曼体系结构主要由输入设备输出设备存储器运算器控制器五部分构成:

(1)输入、输出设备统称外设。有的设备既是输入,又是输出设备。

输入设备: 鼠标、键盘、摄像头、网卡、话筒、磁盘......

输出设备:显示器、播放器硬件、磁盘、网卡......

(2)存储器一般指内存。

(3)其中运算器、控制器,再加上其他的一些寄存器统称为中央处理器 (CPU);

它们都是独立个体,各硬件单元必须用"线"连接(系统总线、IO总线)。


2.关于内存的注意事项

1.内存掉电易失,只能用作临时存储;而磁盘是不带电存储的,可以用于永久存储

2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

4.为了保证读取和写入速度,CPU只和内存打交道

一句话,所有设备都只能直接和内存打交道。


3.CPU

1、CPU如何能够识别我们传递给它的数据和指令?

CPU内部有一套自己的指令集,它会把指令对应到指令集,然后完成相应的操作;

2、CPU需要的数据从哪里获取?

内存 (此处不考虑缓存);

虽然我们的数据是存放在磁盘中的,但是由于磁盘读取与写入数据的速度太慢了,而磁盘的运算速度则是以毫秒甚至秒为单位;CPU如果直接从磁盘中读取和写入数据,会有大量的等待时间,所以为了提高计算机的整体效率,CPU只会向内存中读取和写入数据;内存再向磁盘中读取和写入数据;其中,内存向磁盘读取和写入数据就是IO的过程。


4.程序运行必须加载到内存

CPU需要从程序中读取数据,但是CPU只和内存打交道,而我们的程序是存储在磁盘中的。

举个例子:

发送消息 --> 接受消息的数据流动:A 的键盘 --> A的内存 --> A的CPU (加密) --> A的网卡 --> B的网卡 --> B的内存 --> B的CPU (解密) --> B的显示器;

发送文件 --> 接受文件的数据流动:A 的磁盘 --> A的内存 --> A的CPU (加密) --> A的网卡 --> B的网卡 --> B的内存 --> B的CPU (解密) --> B的磁盘;


二、操作系统

操作系统是一个进行软硬件资源管理的软件。

它通过对下管理好各种软硬件资源,来对上为用户提供良好的 (安全、稳定、高效) 运行环境。

前者是管理手段 ,后者是管理目的


笼统地理解操作系统:

内核 :进程管理、文件系统、内存管理、驱动管理。

其他程序:例如函数库,shell程序等


三、系统调用

1.银行与操作系统

操作系统的理解可以以银行为例:银行需要对客户提供存取服务来进行资金管理,但是银行肯定不能让我们直接接触他们内部的"金库",这是因为他们不信任我们。但是银行有需要和我们接触,怎么接触呢?留出"柜台窗口"。操作系统同理,它会给我们留出一系列系统接口,这些接口就叫做系统调用。

2*.系统调用和库函数概念

1.在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分 由操作系统提供的接口,叫做系统调用。

2.系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。


四、用户操作接口

虽然操作系统为我们提供了各种系统调用接口让我们来访问软硬件,但系统调用接口在使用上功能比较基础,对用户的要求也相对较高,所以人们在系统调用接口的基础上开发出了用户操作接口,比如 Linux 下的外壳程序 shell,各种函数库 (C/C++等)、windows图形化界面。

用户通过这些操作接口进行指令操作、开发操作以及管理操作等;比如 Linux 下外壳程序 bash 提供的 ls,本质上是调用系统接口,将磁盘中文件信息写入到显示器;touch 本质是调用系统接口,在磁盘上创建文件;又比如 C语言的 scanf/printf 函数,底层都是调用系统调用接口从键盘读入数据/向显示器上打印数据。


五、总结

一方面,操作系统对所有软硬件资源进行管理,同时为用户提供访问软硬件资源的系统调用接口,由操作系统来完成资源的各种访问;另一方面,用户为了降低成本,使用各种用户操作接口来访问软硬件资源,用户操作接口的底层再来调用系统调用接口。所以说,操作系统将硬件、软件和用户有机联系了起来。

相关推荐
我不会编程5551 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄1 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
懒羊羊大王&1 小时前
模版进阶(沉淀中)
c++
无名之逆1 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
cg50171 小时前
Spring Boot 的配置文件
java·linux·spring boot
似水এ᭄往昔1 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙2 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
暮云星影2 小时前
三、FFmpeg学习笔记
linux·ffmpeg
owde2 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
xixixin_2 小时前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript