动手学树莓派Python篇第3章:操作系统为何物?为什么要花这么大精力来使用他?

操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。

百度百科定义

操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

帮我们管理好计算机硬件,我们可以通过操作系统友好的使用计算机。

操作系统分类

操作系统体系结构划分:
(1)简单体系结构。例如ucos系列、FreeRTOS、SylixOS、VxWorks(基本级)。特点:用户层与内核层在一个地址空间中。不使用或有限使用虚拟内存。
(2)单体内核(宏内核)。例如,Linux、Unix、Windows、MacOS。特点:操作系统的进程管理、内存管理、设备驱动、文件系统、网络协议栈等都在一个地址空间中,内核十分巨大。
(3)微内核。例如:QNX。特点:内核只保留进程进程管理、内存管理等内核组成模块,将设备驱动、文件系统、网络协议栈编程进程的方式运行,就是一个字:小。

微内核VS宏内核:
(1)系统可靠性:微内核只保留了最基本的内核组成模块,一旦像设备驱动、文件系统异常,不会影响内核运行;而宏内核中,例如你编写了驱动有bug,那整个系统基本都能挂掉了。微内核胜出。
(2)系统性能:宏内核中所有内核组成模块在一个地址空间,模块与模块间通信不涉及内存地址空间的切换,所以速度快;但微内核以像消息队列的方式,完成内核和网络协议栈、设备驱动等模块的通信,这其中涉及内存地址空间的切换,必然形象速度。宏内核胜出。

其实,微内核和宏内核都各有优势,在一个具体的操作系统设计时,会吸取各自的长处;例如,linux是宏内核,但其借鉴了微内核的设计思路,将内核模块引入操作系统中,可以在系统运行过程中,加载或卸载设备驱动等内核组成部分。

按实时性划分:
(1)实时系统。
<1>强实时系统。在指定时间内,一定完成该项任务。例如:VxWorks、SylixOS、QNX等。
<2>弱(软)实时系统。在指定时间内,尽量完成该任务。例如:增加实时性的linux系统。

(2)非实时系统。例如,windows。
影响实时性的几个因素:
(1)中断设计。一般芯片或者操作系统不会配置为中断可嵌套模式,所以CPU进入中断后,除非执行完毕中断处理程序才能执行其他任务。这是一个很重要的指标,我之前你看过linux的部分网络设备驱动程序,有的在中断中记录事件,利用系统提供的网络软中断模式(此时,已经退出中断模式,cpu可以继续响应中断了)进行数据的处理,但有的驱动在中断里进行数据处理,如果cpu正在中断中处理网络数据,但此时来了一紧急中断,那只能等了。
(2)内存管理。有了虚拟内存后,应用层进入内核,内核会应用层,必然消耗大量时间,影响指定时间内完成任务重要因素。
但是,不是你使用了强实时系统,你的设备就能保证强实时的要求,例如你写一个驱动,在中断中完成任务,那因为你的驱动而响应整个系统的实时性。
这么多种操作系统,我们该如何选择呢?

(1)实时性要求极高的系统。可以使用商业的VxWorks和SylixOS,商业的是要收费的,而且VxWorks是美国红河公司的,技术支持的难度可想而知;国产自主可控的SylixOS是一个很好的选择,只是起步晚,成功的案例正在逐步积累,被领域内所认可需要时间。对于非商业的,可以使用FreeRTOS,开源免费的,目前是商业免费的。
(2)任务要求多、功能复杂等的只能选择像linux这样的系统了。基本可以认为,计算机能完成什么样的功能,使用linux的嵌入式系统也能完成;当然要求你的芯片对性能是否有影响。

Linux内核组成部分

linux内核由7部分组成:系统调用接口、进程管理、内存管理、虚拟文件系统、网络协议栈、处理器体系相关部分、设备驱动。

(1)系统调用接口(SCI)。
内核为应用层提供的使用内核的接口,应用层可以通过系统调用接口,向内核申请服务。
SCI与API有何区别。SCI为系统调用接口,API为应用程序调用接口;应用程序使用API完成既定任务,一个API可以调用一个SCI函数、可以调用多个SCI函数、也可以不调用SCI函数(例如,数据计算库中的数值计算API接口)。

(2)进程管理。
进程是操作系统资源分配的基本单元,进程管理负责对进程的CPU使用、内存使用、IO使用的管理工作。

进程与线程。线程是操作系统调度的最小单位,线程建立在进程之内,一个进程包含至少1个线程;1个线程就是1任务执行过程,例如,线程1让led1灯以5Hz频率闪烁、线程2让led2灯以9Hz频率闪烁,就可以建立2个线程,线程1睡眠100ms点亮led1、睡眠100ms熄灭led1,线程2睡眠125ms点亮led2、睡眠125ms熄灭led2。进程为其上运行的线程同系统资源,例如内存、IO等。

多进程与多线程程序设计模式。通常来说,程序设计为多线程模式,可以提高系统的性能,在同一进程里的多个线程,使用想用的进程地址空间,同一进程上的线程切换不会更换页表(每个进程有自己独立的页表、彼此相同,页表切换会消耗大量时间)。多进程间切换虽然消化大量时间,但程序的可靠性好,在多线程模式中,一个线程异常,操作系统会改掉该线程所处的进程,同处该进程的其他线程也都停止服务了;但多进程模式,单个进程的异常被干掉了,其他进程可以继续提供服务。

进程和程序。进程是运行中的程序,是程序被执行时的状态。一个进程可以执行多个程序,一个程序可以被同时执行多次。

(3)内存管理。
内存是整个计算机系统中的核心,内存管理不好产生内存泄漏,系统会出各种意想不到的bug。

内部碎片和外部碎片。内部碎片就是你要申请100字节内存,系统给你分配了120字节内存,这20字节就成内部碎片了,不能被使用;外部碎片就是当前130字节空闲区域,这130字节之后是200字节已经被占用的内存,你申请100字节内存,系统将130字节内存中100字节给你了,你在申请100字节内存,上次剩下的30字节就不能用了,就是外部碎片,只能向后继续寻找看看有没有100字节空间给你。

如果系统运行了一段时间后,遍布这种小的外部碎片,例如有100个30字节的外部碎片,但你想申请100字节空间,但从剩余容量100*30=3000字节总容量是够得,但系统无法分配到连续的100字节空间给你,内存申请失败,这就叫内存泄漏。

linux使用的是伙伴系统(大块内存分配)和slab(小块内存分配)技术来降低内存内部碎片、避免内存外部碎片。

(4)虚拟文件系统。
虚拟文件系统使得“一切皆文件”的哲学思想在linux上成为了现实(推荐阅读《Linux/Unix设计思想》,人民邮电出版社出版。其中,给出“小既是美”、“三个系统”、“沉默是金”等Linux/Unix设计哲学思想)。 
虚拟文件系统,为用户提供统一的系统调用接口,例如:open、read、write等,用户在应用层不需关注是什么类型的设备,采用统一的处理函数,每种设备的差异隐藏在虚拟文件系统之下。

(5)网络协议栈。
linux之所以强大,其健壮的网络协议栈出了很大力。从服务器开始、向下经过各级路由器、到我们的中断手机(安卓手机)上,无不运行着linux的网络协议栈。本人有幸从socket层开始、向下经过传输层、网络层直达网络接口层,认真阅读了以太网驱动、无线网驱动,后面将尽我所能带大家来一场linux的网络协议栈之旅。

(6)处理器体系相关部分。
顾名思义,就是与cpu体系相关的,每种体系的处理器包含在一个目录下,例如包含x86体系的、ARM体系的、MIPS体系的等,此核心源代码所支持的硬件体系结构相关的核心代码。

(7)设备驱动。
设备驱动的开发,是现在国内linux开发者主要做的工作,就是对自行定制的硬件编写linux驱动程序、添加到linux系统中,让用户可以使用该设备。

世间设备千奇百怪,但linux内核的设计着花了大量精力对设备进行抽象,将设备分为字符设备、块设备和网络设备;同时,为linux驱动开发工程师提供了platform虚拟总线的框架,将设备描述和设备驱动程序进行分离,更加利于驱动程序的移植性。

Linux内核预览

下面这样“linux kernel map”图片够震撼吧,但liunx远比这张图更震撼。不要被这样图吓到,我会尽我所能,逐步向上攀登,等我们浏览完内核的核心景区后,回头再看看这张图片,你会感觉“内核在此,而不至于此”。

课程 bilibili 视频地址:https://www.bilibili.com/video/av71878718/?p=7

- 本文内容来自网络,如有侵权,请联系本站处理。

2022-12   阅读(6)   评论(0)
 标签: 编程

涨知识
图灵测试

图灵测试的方法是:被测试人,和一个待测试的机器。测试时,测试人与被测试人是分开的,测试人只有以纯文本的方式向被测试人问一些问题,这些问题随便是什么问题都可以。问过一些问题后,如果测试人能够正确地分出谁是人谁是机器,那机器就没有通过图灵测试,如果测试人没有分出谁是机器谁是人,那这个机器就是有智能的。

评论:
相关文章
Blockly 事件

工作区上的每个更改都会触发一个事件。这些事件充分描述了每个更改的前后状态。



Blockly开始使用

本文档面向希望创建自己的应用程序的开发人员,这些应用程序将Blockly集成为代码编辑器。


知乎277万浏览热帖:少儿编程是不是收智商税?

少儿编程被越来越多的家长关注,很多媒体和机构也在宣传学习少儿编程的好处,部分宣传比较夸张,诸如“未来人工智能时代,不学习编程就会”导致家长更容易陷入焦虑,到底要不要孩子去学编程呢?


Thonny 4.1.3 下载

Thonny是一款免费的、开源的、易于使用的编程语言,旨在为初学者提供简单易用的编程环境。 Thonny的语法简洁易懂,同时还支持自动补全和语法高亮,使得编程变得更加便捷。


Small Basic 编程入门 06 - 图形入门

Small Basic 还有一组强大的图形功能。


Blockly 工具箱

工具箱是用户可以从中创建新块的侧面菜单。工具箱的结构由XML指定,它可以是节点树或字符串表示形式。当该XML注入页面时,它将传递给Blockly。


App Inventor 编程实例及指南-第4章 开车不发短信

本章将创建一款“开车不发短信”的应用,让你在开车时能够自动回复收到的短信。


《编程之美》作者:三个公式,23本有趣的书

微软亚洲研究院首席研发经理邹欣在工作之余,出版了几本书,其中《编程之美》、《构建之法》在程序员界颇具名气。这次,我们请他谈谈他喜欢的专业书。


Micro:bit MicroPython 教程 8.2 变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

搜索
最新课件
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。