深入理解操作系统与计算机体系结构

文章目录

操作系统(Operator System)

概念:

操作系统(Operating System,简称OS)是计算机系统中负责管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统是计算机上的一个系统软件,它是计算机系统中的一个系统软件,它是用户与计算机硬件之间的接口,负责管理计算机的硬件和软件资源,并为它们提供合理的分配和使用。

以下是计算机体系结构,从操作系统的位置就可以看出来它有多重要。

总而言之操作系统有两个功能,一是提供抽象接口,二是管理软硬件资源

究其根本就是对上层用户提供良好稳定高效的服务,对下做好软硬件资源管理。

为什么要这么做呢?没有它又会怎么样呢?


为什么要有操作系统

在早起刚出现计算机的时候,是没有操作系统这个概念的,计算机如果想要运行起来全要靠人为的操作,假试想你今天准备玩一款自己最喜欢玩的游戏,你不仅要思考如何通关游戏,你还要思考我怎么操作我的计算机它才能运作起来,这是十分痛苦的一件事情,所以操作系统就应运而生了,对于我们用户来讲,不再需要考虑底层硬件要如何调动,也不需要考虑怎么才能使计算机最高效的运行,这种问题全部交给操作系统解决,我们上层用户就解放了双手。


操作系统是如何进行管理的

我们营造一个场景,你现在是一名管理者,你要如何对你的下级成员进行管理?

首先你会把你下级成员的信息进行登记,然后你就有了一份人名单,上面详细记录着成员的属性信息(年龄,联系方式,释放达到本月KPI),有了它你就能对你的成员进行管理了,假设今天你发现某名成员的KPI指标不合格,这时你就会通知他的组长去通知他,让他收拾收拾准备下个月卷铺盖走人,这时你就完成了一次管理工作。

在此场景下你就是操作系统,你手下的小组长就是驱动程序,被开除的那个倒霉蛋就是硬件(当然操作系统最好不要炒硬件的鱿鱼,我开玩笑的啦😆)

那么在计算机视角他是如何管理硬件的呢?和你管理下级成员一致,它会把硬件的属性信息进行记录,如何再通过高效的数据结构将各个硬件的信息进行组织。

我们可以把这种行为进行高度提炼总结成六个字

先描述,再组织 (这个超级重要!!)。

你再回想自己,曾经是否写过通讯录这种程序。

首先你会对通讯录成员的重要属性进行提炼,最后通过链表这种数据结构进行组织。这种将实际问题转换成计算机理解的问题的过程就是一种建模过程。

c 复制代码
struct personInfo
{
    char name[20];
	int age;
	char sex[4];
    struct personInfo* next;
}
struct contactInfo
{
 struct personInfo* head;
 int total;
}

如果你学习过任何一门面向对象的编程语言的话,面向对象做的就是先描述再组织这个工作,将对某种实际问题的管理转换成了对特定数据结构的增删查改。


为什么说操作系统是安全,稳定,高效的

假试想没有操作系统对上层用户的制约,你可以随时对底层进行访问,你可以进行一切原本不能进行的越权访问,正是因为有操作系统的存在让我们有了一个安全,稳定,高效的运行环境。

正是因为要为我们维护这种安全,稳定,高效的运行环境。所以任何用户都不能越高操作系统直接访问底层,假试想如果有有一个可以随意对操作系统的管理进行干扰,操作系统的意义何在,操作系统表示我本来是要通过A方式进行管理的,但是今天用户突然打扰了我,我不会了呀,我接下来要怎么做呢?你可能是说操作系统你自己随机应变不就好了,sorry操作系统并没有你想的那么智能,这是操作系统就失去了原本的作用。

所以任何用户都不能越高操作系统直接访问底层,这是原则不能违背。(如果你说嵌入式不就可以直接访问底层吗?我求求你们,不要那么杠精😕)


理解系统调用和库函数

概念:

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

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

系统调用是操作系统提供的接口,我们通过系统调用可以做到访问操作系统。

我们通过前面的学习已经知道任何用户都不能越高操作系统直接访问底层,库函数也一样,所以库函数底层实现一定封装了系统调用接口,像fread底层就封装了read系统调用接口。


本章到此结束,感谢您的阅读!

相关推荐
小毛驴85015 分钟前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
好好学习啊天天向上1 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
学不动CV了3 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
典学长编程3 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
wuk9983 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
优创学社23 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术3 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理3 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
彭祥.4 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类