操作系统
操作系统(英语:Operating System,缩写:OS)是一种内置的程序,用来协作计算机的各种硬件,以与用户进行交互。如 Windows 在个人电脑办公、游戏娱乐领域占据主导;macOS 凭借出色的图形处理能力受设计、影视等专业人士青睐;Linux 因稳定性和开源特性广泛应用于服务器管理与科研开发;华为鸿蒙系统聚焦于万物互联,实现跨终端设备协同,让读者快速了解各系统专长。
操作系统定义
操作系统实际是就是一个管理软硬件资源的程序,向下而言管理底层硬件,向上而言提供方便使用的接口。
操作系统的意义与目的
面对于不同的底层硬件例如鼠标与键盘来说,他们的底层电路设计千差万别,如果没有操作系统帮我们管理,那么我们访问鼠标或者键盘必须要懂得他们底层的电路设计与实现。但是有了操作系统之后,鼠标厂家根据OS要求,提前封装好了驱动程序,那么我们在访问鼠标与键盘的时候就可以统一使用一套标准,大大的简化了开发流程。
有了操作系统之后,软件开发人员就不需要过于关注底层硬件的细节,只需要熟悉使用OS提供的接口即可,就可以快速的开发应用,对于用户来说就可以获得更好的体验,这就是OS的目的。
操作系统的硬件管理
假设此时我们是某鹅公司的老板,我们要做的就是管理好公司的员工,然后给用户良好的体验。
截至2024年的某鹅员工总数为105,506名,身为公司的CEO,我们不可能了解到每一个员工,我们只需要管理好几个主管做出决定就可以了,然后让主管管理下面的员工。我们做出的决定一定是根据公司员工的水平,以及市场行情做出来的,==也就是决策就是对于数据进行处理。==这时假如我们有一份员工的基本情况表。如下图
此时我们公司有105,506名员工,作为老板不可能一页一页的翻看,那么相当于日阅读100万字,早上6点爬起来看到晚上都看不完。此时就可以利用计算机来处理。我们定义一个结构体person,里面有员工的信息。如下代码
// 定义员工信息结构体
struct Employee {
int id; // 员工编号
char name[50]; // 员工姓名,使用字符数组存储,最多存储 49 个字符加一个'\0'结束符
float salary; // 员工薪水
int age; // 员工年龄
struct Employee* next;//下个结点
};
此时员工信息表就可以用单链表的方式串在了一起,假如我们要开除60以上员工,只需要遍历一遍链表找出60岁以上的员工,删除该节点即可,我们对于员工的决策就转化为了对于单链表的增删查改了。
通过以上例子,由此我们便有了一种管理方式:先描述再组织,将想要管理的数据描述为抽象类型然后用语言描述,然后利用数据结构存储起来,我们对数据的处理就变成了数据结构的增删改查。
其次OS对于硬件管理也是如此。先定义个device结构体变量。
// 定义设备结构体
struct Device {
int id; // 设备编号
char name[50]; // 设备名称
float price; // 设备价格
int quantity; // 设备数量
char status[20]; // 设备状态,例如 "正常"、"维修中"、"已报废" 等
struct Device* next;
};
然后用单链表的方式组织起来,对于设备的增加删除修改,变为了对于单链表的增删改查。
操作系统的上层管理
对于操作系统来说,他不光要对于底层硬件进行封装,==还要向上提供安全,高效的开发与使用环境。==假如把银行比做个操作系统,那么用户有存钱,取钱的操作。为了保护银行的安全,用户是不被允许进入银行内部操作的,只可以通过窗口来完成操作。如果操作系统允许开发者直接访问硬件资源,那么便可能被坏人修改其他程序的数据,从而导致操作系统崩溃,进程之间相互干扰,因此OS必定是封闭的,不允许开发者随意修改数据。
但是OS的目的是为了给用户提供服务,就必定会开放一些窗口,给开发者使用,尽可能的减少错误出现的可能。这就是system call,但是系统提供的原始接口对于普通大众还是过于复杂了,有人就会问主播主播有没有简单又强势的操作,有的有的,于是便有了C语言标准库,Java虚拟机等用户接口,通过将系统调用再次封装从而实现开发者较为简单的使用。于是我们在C语言中便可以通过一句简单的printf就向显示屏打印文字。