彻底理解操作系统与内核的区别!
通用底盘技术
Canoo公司有一项核心技术专利,这就是它们的通用电动底盘技术,长得是这个样子,非常像一个滑板:

这个带轮子、有电池、能动的滑板已经包含了一辆车最核心的组件,差的就是一个外壳。这个看起来像滑板的东西就是所谓的电池系统和底盘一体化技术,Canoo公司在它们的通用底盘上加装不同的外壳就能制造出不同的车型。

什么是内核?
在上面这个示例中,包含轮子以及电池系统的底盘就好比内核,而套上外壳加上椅子以及内饰后的整体成品就好比操作系统。内核仅仅是操作系统的一部分,是真正与硬件交互的那部分软件,与硬件交互包括读写硬盘、读写网盘、读写内存以及任何连接到系统中的硬件。除了与硬件交互外,内核还负责分配资源,分配什么资源呢?所谓资源就是硬件,比如CPU时间、内存、IO等等,这些都是资源。

现在我们知道了内核负责分配资源,那么问题来了,要怎么分配这些资源呢?答案就是以进程的形式来分配资源。怎么分配呢?一句话:虚拟大法好。每个进程都认为自己在独占CPU,这通过CPU时间片来实现,内核让CPU在各个进程之间快速切换,这样程序员写好程序员后直接运行即可,即使在单核系统中运行成百上千个进程都没有问题。每个进程都认为自己在独占内存,这通过虚拟内存来实现。有的同学可能会问,为什么都要虚拟化呢?答案显而易见,因为计算机系统内的资源是有限的,我们只有几个CPU核心、几个G的内存,但却要同时运行几百几千个进程,除此之外我们别无它法。如果你还知道有其它更高效的方法那么赶紧放下手机,马上将你的思想写成论文发表出来,下一届的图灵奖非你莫属。
。

因此,内核的职责就是以进程的形式来分配CPU时间,以虚拟内存的形式来分配物理内存,以文件的形式来管理IO设备。
什么是操作系统?
然而只有一个内核实际上是做不了什么真正有用的事情,就像上面示例中那个通用底盘一样,这个底盘确实能跑起来,但你没办法开着这样一个底盘出去浪,因为这个底盘很难用。因此,你不得不加装上方向盘、座椅以及车身外壳等,同样的道理,内核是给人用的,为了与内核交互,发明了命令行以及图形界面GUI。

除了给普通用户提供使用的接口之外,操作系统还需要给程序员提供编写程序的接口,当我们写的程序依赖内核提供的服务时是该怎么办呢?有的同学说我们需要依赖内核提供的服务吗?想一想,进行网络编程时你有没有自己编写过处理TCP/IP协议栈数据的代码?你有没有自己写代码从网卡上收发数据?都没有,实际上你需要做的仅仅是简单的调用一些socket接口就可以了。网络编程仅仅是其中的一项,其它还包括文件IO、创建进程、创建线程等等等等,这些是内核提供的,那么我们该怎么使用呢?答案就是通过所谓的系统调用,system call。通过系统调用,我们可以像使用普通函数那样向操作系统请求服务,当然,直接使用系统调用是非常繁琐的,因此通常会在这之上提供一层封装。

在Windows平台就是给程序员提供编程接口的是Windows API,这层API包罗万象,不但包括上文提到对系统调用的封装,还包括其它功能,像创建带有图形界面的应用程序等等。但在Linux世界你找不到一种类似Windows API的东西,毕竟Windows是微软自家产品,什么都可以打包起来,Linux只是一个开源的内核,如果一定要找一个类似的东西话那就是libc,也就是C标准库,这里同样包括了对系统调用的封装以及一些库函数,但libc不包含创建带有图形界面应用程序的功能。现在我们知道了,操作系统需要提供两种接口:
- 给用户提供操作接口。
- 给程序员提供编程接口。
这些就是好比汽车的外壳,我们(用户和程序员)看得见摸得着,外壳加上底盘——也就是内核,才是功能完善的操作系统。

资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linuxc/c++高级开发【直播公开课】
零声白金VIP体验卡:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)
各种各样的操作系统
实际上我们熟悉的Linux只是内核而不能称得上是操作系统,Ubuntu则可以认为是操作系统,其内核是Linux;RedHat也是操作系统,其内核同样是Linux;我们可以看到,尽管Ubuntu和RedHat是不同的操作系统,但其内核可以是相同的。这就好比它们可以基于同样的底盘打造出不同的车型。而我们熟悉的Windows也是操作系统,其内核是Windows NT内核。
总结
内核就像本文开头提到的电动底盘,包含了一个汽车的最核心元素;但这样一个底盘并没有什么实际用处,当搭配上外壳以及座椅后才是一辆真正有用的车,这就好比操作系统。值得注意的是,不同的操作系统可以有相同的内核。当我们在使用方便的智能手机以及个人PC时不应忘记,正是操作系统在背后的默默工作让一堆硬件电路变得这么好用。希望这篇文章对大家理解操作系统以及内核有所帮助,
原文作者:码农的荒岛求生

相关文章:
 
彻底理解操作系统与内核的区别!
通用底盘技术 Canoo公司有一项核心技术专利,这就是它们的通用电动底盘技术,长得是这个样子,非常像一个滑板: 这个带轮子、有电池、能动的滑板已经包含了一辆车最核心的组件,差的就是一个外壳。这个看起来像滑板的东西…...
微信小程序4
一自定义组件应用 1.介绍 微信小程序自定义组件是指开发者可以自定义组件,将一些常用的 UI 元素封装成一个自定义组件,然后在多个页面中复用该组件,实现代码复用和页面性能优化的效果。 2.自定义组件分为两种类型 组件模板类型:…...
OpenCV14-图像平滑:线性滤波和非线性滤波
OpenCV14-图像平滑:线性滤波和非线性滤波 1.图像滤波2.线性滤波2.1均值滤波2.2方框滤波2.3高斯滤波2.4可分离滤波 3.非线性滤波3.1中值滤波3.2双边滤波 1.图像滤波 图像滤波是指去除图像中不重要的内容,而使关心的内容表现得更加清晰的方法,…...
kafka_2.10启动Kafka broker
要启动 Kafka broker,你需要执行以下步骤: 首先,确保你已经安装了 Kafka。你可以从 Apache Kafka 的官方网站下载 Kafka 的二进制发行版,并按照官方文档中的说明进行安装。 在安装完成后,进入 Kafka 的安装目录。 打…...
 
【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库
一,环境 Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器SQLite - 3.43.2Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.5.3 二,SQLite简介 简要介绍 SQLite(Structured Query Language for Lite&a…...
 
Confluence 自定义展示页面
1. 概述 Confluence 作为知识库可通过JS脚本方式,根据登录用户或用户组进行前端页面的自定义 2. 实现方式 Confluence →管理→自定义HTML 嵌入对应JS脚本,示例如下 <script type"text/javascript">jQuery(#footer).html(<div>…...
使用C#的Socket从头实现的带有文件上传和下载功能的HTTP服务器
使用C#和Socket从头实现的带有文件上传和下载功能的HTTP服务器。它支持GET、POST请求方法,并能处理URL参数、请求体以及文件上传和下载。 using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text;class HttpServer {publi…...
 
【OSPF Loading、FULL状态与display ospf peer brief命令、OSPF的数据库讲解】
个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻❄️个人主页🥇:落. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基…...
 
除氟树脂在工业、市政含氟废水处理中的应用
含氟废水的不达标排放对自然环境有很大的危害,氟化物离子可以累积在土壤和水体中,从而对生态系统造成破坏。大量的氟化物离子会对植物生长产生不良影响,并对水生生物造成毒性作用,严重时还可能导致生态灾难。氟化物离子如果没有得…...
模拟地和数字地的区别
模拟地和数字地的主要区别体现在设计目的、处理技术、数据类型和数据精度四个方面。 设计目的:模拟地的主要设计目的是分析时空数据、进行模型和预测,它主要关注动态变化和过程。而数字地的主要设计目的是数据的存储、管理、查询和分析,在地…...
 
Druid连接池最小连接数设置失效问题
问题发现: 配置 当项目启动后 线程池确实是初始化了5条连接,但是当项目运行一段时间后,5条连接确消失了,只会程序用到得时候,再去初始化连接,这样有点违背了参数设置得意义,后来通过查阅资料发…...
Javascript数据类型和类型转换
Javascript数据类型和类型转换 在JavaScript中,理解数据类型,如何区分它们,以及它们如何被转换是至关重要的。在这篇文章中,我们将探讨这些主题,以帮助巩固你的JavaScript基础。 基础数据类型和引用数据类型 当涉及…...
 
冲刺十五届蓝桥杯P0005单词分析
文章目录 题目分析代码 题目 单词分析 分析 统计字符串中字母出现的次数,可以采用哈希表,代码采用的是数组来存储字符,将字符-97,得到对应的数组下标,将对应下标的数组;找到数组元素最大的下标ÿ…...
 
php获取10年内的年份并加入下拉列表
要实现的效果 在html中内嵌php循环将数组中的年份加入下拉列表 <div class="form-group"><label>年份:</label><div class="input-group"><div class="input-group-prepend"><span class="input-group-te…...
 
2020年亚太杯APMCM数学建模大赛B题美国总统的经济影响分析求解全过程文档及程序
2020年亚太杯APMCM数学建模大赛 B题 美国总统的经济影响分析 原题再现: 美国总统选举每四年举行一次。 2020年是美国总统大选年,共和党候选人唐纳德特朗普和民主党对手乔拜登竞选总统。 甲乙双方候选人在金融贸易,经济金融治理,…...
 
保护隐私就是在保护自己!如何在Android上更改应用程序权限
如果你关心隐私,知道如何在Android上更改应用程序权限将成为一项非常重要的技能。即使是最好的安卓应用程序也可以对手机的功能和数据进行广泛的访问,因此准确控制它们的使用范围会有所帮助。 一旦你在手机上加载了应用程序,你可能会注意到它…...
 
Linux/Ubuntu 安装 Java运行环境
linux下安装Java运行环境 1、下载安装包 .tar.gz 先在官网下载 JDK 点击这里 在这里要选择对应的 JDK 版本,一般我们目前选择JDK8 点击这里 2、在 /usr/local/ 目录下创建Java文件夹 cd /usr/local/ mkdir java3、将下载的文件通过FTP程序上传到刚刚创建的Java文…...
vue2 中activated和deactivated是详细解说
activated 和 deactivated 是 Vue.js 中的生命周期钩子函数,主要用于处理组件在 keep-alive 缓存中进入和离开时的行为。 这些钩子函数通常用于在组件进入缓存时执行特定的操作,以及在组件离开缓存时执行清理操作。 下面是关于这两个钩子函数的用例和示例…...
 
C# GFPGAN 图像(人脸面部)修复
效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…...
ruoyi项目登录验证变更
背景:我用的是ruoyi-vue3.8.6版本,因公司需要使用window的域用户进行登录验证,因此原有的ruoyi登录验证方法就得替换掉 1. 首先登录系统添加一些域账号,以确保登录方式更改后,能在sys_user中找到该账号,因…...
 
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
 
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
 
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
