为什么计算机需要操作系统?(一文详解~)

news2024/9/21 14:35:31

我们从三个方面来简单聊聊为什么计算机系统操作系统这个话题。

资源分配器

如果你的CPU上只需要运行一个程序,那么你的确不需要操作系统。

可是,一旦你的CPU上需要再运行一个程序,那么马上就会面临一个问题:两个程序开始竞争资源 ,因为计算机的硬件就那么多:有限的处理器个数、有限的内存容量、有限的磁盘容量等等,当在只有一个CPU(核)的机器上要运行两个程序时,在某一个时刻CPU到底该运行哪个程序呢?

这显然不是程序1应该关心的事情,当然,也不是程序2该关心的事情,这就需要必须得有一个什么程序来关心,这个程序就是操作系统。

操作系统存在的目的就是为了合理的给各个运行起来后的程序分配资源,从这个角度你可以把操作系统理解为一个资源分配器 。

显然你不能把CPU切成多个小的CPU,而只能采用“分时”的策略,也就是“你用一会我用一会”,这就好比大家去游乐场玩过山车,由于过山车只有一个,而且不能拆分成更小的给大家用,因此大家只能排队,你用一会我用一会;

操作系统也采用此策略将CPU资源分配给各个进程,因此从操作系统的角度看“进程A用一会CPU后然后暂停,进程B再用一会儿”,即,操作系统不断的将CPU在各个进程之间切换,只不过切换的速度足够快,因此从用户看来进程在同时运行;操作系统决定以什么样的顺序将CPU分配给各个进程就是所谓的进程调度。

而像内存或者磁盘这类存储资源与CPU不同,我们可以很方便的将内存进行划分,因此可以采用“分块”的策略,也就是“ 你用一块我用一块”,这就是好比停车位,一个停车场中有很多停车位,大家可以同时去停车场中停车。

内存也是同样的道理,我们可以将内存的划分给不同的进程,因此不同的进程可以同时 存在于内存中。

为高效使用有限的内存资源,操作系统在内存的使用上可谓绞尽脑汁,虚拟内存就是精彩的发明,其可以让更多进程常驻内存,当然,虚拟内存也带来不小的挑战,这些都需要靠软硬件结合来解决。

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

资源隔离与秩序维护者

程序A的运行不能干扰到程序B,即,如果程序A出现bug导致崩溃,那么它不能影响到系统中的其它程序,当然也包括操作系统这个程序;

程序A决不能随意访问程序B所在的内存区域等等,你肯定不希望其它程序能直接获取你的聊天信息,这些都需要操作系统进行资源隔离。

除此之外,复杂的任务需要借助多个程序通力合作才能完成,因此程序之间除了隔离之外也必须进行必要的通信,比如进程间通信等,这时操作系统必须提供必要的同步以及互斥机制,确保程序对共享资源的访问以及程序的运行顺序符合程序员的预期。

因此从这个角度看操作系统又是资源隔离与秩序维护者。

细节屏蔽者

操作系统和TCP/IP协议栈的作用是类似的,如果没有TCP/IP协议栈,那么在发送网络数据时你需要自己填写好tcp协议header,维护好tcp的链接状态,发送前要进行三次握手,发送的过程中需要保证数据包的可靠传输、还要自己维护tcp的拥塞控制等等,搞定tcp协议还不算完,不要忘了还有ip协议,除此之外还有数据链路层等等,如果这一切都要自己搞定,相信没有多少程序员能进行网络编程 ,而且大部分程序员在编写网络程序时相信对这些细节也不感兴趣。

这时tcp/ip协议栈就非常重要了,它通过socket对上层程序员屏蔽了网络的复杂度,程序员仅需要调用send/recv即可进行网络数据的收发,这大大简化了网络编程,因此你可以把内核中负责处理tcp/ip的那一部分理解为计算机网络的”操作系统“。

而操作系统也是同样的道理,我们知道真正完成计算任务的是硬件,hardware,而硬件本身通常是非常难以编程的,尤其设计I/O的部分,因为这非常的细节、非常琐碎,程序员在读写文件时大概率不想关心要读写的数据到底保存在磁盘的哪个盘面、哪个柱面、哪个扇区上,也不想关心该使用什么样的机器指令可以控制磁盘的读写、怎样平衡好读写速率与磁盘寿命等等,你需要的是两个read/write函数就能读写文件这种抽象概念(实际上从磁盘的角度来说根本不存在文件这种概念)。

这时操作系统的作用就非常明显了,操作系统对上层应用屏蔽了底层的这些细节,让程序员可以将注意力放在自己的领域上。

因此,从这个角度看操作系统更像是一个细节屏蔽者,它提供的一个重要的功能就是:抽象,Abstraction。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山东大学教授团畅谈ChatGPT革命座谈会,探讨ChatGPT发展趋势

2月18日,由山东大学多院系教授学者组成的山东大学教授团在济南福瑞达自贸创新产业园举行了“畅谈ChatGPT革命”座谈会,诸位教授学者就ChatGPT出现的影响进行了探讨。产业园首席顾问李铁岗教授向大家介绍产业园区山东大学经济学院教授、济南福瑞达自贸创新…

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)

前言 资源放CSDN上面过不了审核,都快结束了都没过审真的麻了,订阅专栏的同学直接加我微信直接发你。我只打造优质专栏。专注建模四年,博主参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使…

音视频基础之音频编码原理简介

一:隐蔽信号 数字音频信号如果不加压缩地直接进行传送,将会占用极大的带宽。例如,一套双声道数字音频若取样频率为44.1KHz,每样值按16bit量化,则其码率为: 244.1kHz16bit1.411Mbit/s 如此大的带宽将给信号…

linux系统编程2--网络编程socket知识

在linux系统编程中网络编程是使用socket(套接字),socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址端口号”就称为socket。在TCP协议中&#…

(考研湖科大教书匠计算机网络)第五章传输层-第八节2:TCP连接管理实践部分

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 此部分为补充内容,主要使用Java实现TCP和UDP通信 一:UDP通信 (1)Java数据报套接字通信模型 Java UDP通信模型&#xff…

算法笔记(十)—— 哈希函数和哈希表

认识哈希函数和哈希表的实现 哈希函数 哈希函数:输入域无穷,输出域(哈希值)相对有限 哈希函数:相同的输入一定会返回相同的输出值 由于输入域的无限和输出域的有限,不同的输入可能会返回相同的输出&…

配置Tomcat性能优化

配置Tomcat性能优化 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! &#x1f4…

常用类(五)System类

(1)System类常见方法和案例: (1)exit:退出当前程序 我们设计的代码如下所示: package com.ypl.System_;public class System_ {public static void main(String[] args) {//exit: 退出当前程序System.out.println("ok1"…

详解C++的类型转换

文章目录前言一、C语言中的类型转换二、为什么C需要四种转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast四、RTTI总结前言 在C语言的类型转换有一个非常大的坑,有好多悄悄地转换,有时候把我们转换的就蒙了,因为C要兼容C语言,所以C就…

docker容器单机网络

前言 通过文章 容器的本质可知,容器只是一个进程,而容器所能看到的网络栈,是隔离在自己的 Network Namespace 中。docker 容器单机网络支持四种网络模式,也都是基于 Network Namespace 实现的。本文主要是介绍这四种模式的使用方…

四、actions处理异步行为和调用

四、actions处理异步行为和调用 action:装方法的一个对象。 使用场景:在Vuex运行的环节中,有异步操作——>就必须经过action mutations不能进行异步操作。 最常用的案例:异步请求获取数据 使用方式: 组件中使用a…

移动WEB开发一、基础知识

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

git ssh配置

ssh配置 执行以下命令进行配置 git config --global user.name “这里换上你的用户名” git config --global user.email “这里换上你的邮箱” 执行以下命令生成秘钥: ssh-keygen -t rsa -C “这里换上你的邮箱” 执行命令后需要进行3次或4次确认。直接全部回车就…

基于 ChatGPT 3.5 和 Bing 搜索引擎的会话式搜索引擎 Perplexity 初体验

一、背景 最近 ChatGPT 非常火爆,但是基础版经常访问失败,于是乎想找一些替代品。 搜到了一个 基于 ChatGPT 3.5 和 Bing 搜索的会话式搜索引擎 Perplexity 体验了下非常不错,值得推荐。 二、联系和区别 2.1 联系 官网在外媒社交媒体上…

三、NetworkX工具包实战3——特征工程【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w NetworkX…

【安卓开发】安卓广播机制

读书笔记系列(第一行代码) 5.1 广播机制简介 标准广播:完全异步执行,广播发出后,所有广播接收器几乎都同一时刻收到这条广播(无法被截断)有序广播:同步执行,广播发出后…

优秀!19年后,它再次成为TIOBE年度编程语言

新年伊始,TIOBE发布了2022年度编程语言,C时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C便成为年度编程语言。2022年,C获得了最高的人气4.62%,紧随其后的是…

maven打包顺序与jvm类加载顺序

背景:一次dev测试过程中,发现代码中关于jsr303的校验失效,校验类如下,会报一个莫名其妙的运行时错误;遂进行排查。import javax.validation.constraints.NotBlank;Data Accessors(chain true) public class Demo {Not…

为什么会有跨域问题,代理是怎么解决的?

📖 文章导航关于跨域问题同源策略跨域资源共享解决方案前端代理后端服务端代理关于跨域问题 同源策略 同源策略(Same-origin policy)是浏览器中一个重要的安全策略,它用于限制不同源之间的资源交互。其目的是为了帮助阻隔恶意文…

由浅入深,一起来刷Java高级开发岗面试指南,面试必定无忧!

前言 我只想面个CV工程师,面试官偏偏让我挑战造火箭工程师,加上今年这个情况更是前后两男,但再难苟且的生活还要继续,饭碗还是要继续找的。在最近的面试中我一直在总结,每次面试回来也都会复盘,下面是我根…