首页 > 其他分享 >操作系统的抢占、重入

操作系统的抢占、重入

时间:2023-11-17 10:45:10浏览次数:32  
标签:调用 抢占 操作系统 任务 内核 CPU 函数

参考: https://blog.csdn.net/m0_64727117/article/details/130976784

一、抢占式内核、抢占式调度、抢占式中断:
某一中断执行完成后,如果有更高优先级的任务处于就绪状态,将执行更高优先级任务。

抢占式内核的优点:
(1)最高优先级的任务什么时候可以执行,可以得到CPU的使用权是已知的,使用抢占式内核使任务响应时间得到最优化。

抢占式内核的缺点:
(1)不能直接使用不可重入型函数,调用不可重入函数时,要满足互斥条件。否则调用不可重入型函数的话,低优先级的任务CPU使用权就被高优先级任务剥夺,不可重入型函数的数据有可能被破坏。

二、非抢占式内核、非抢占式调度、非抢占式中断:
一个任务只有主动放弃CPU的使用权,将cpu资源给其他任务(线程)使用,才能实现多任务并发。

非抢占式内核的优点:
(1)中断响应快
(2)允许使用不可重入型函数
(3)运行的任务占用CPU,不必担心被别的任务抢占

非抢占式内核的缺点:
(1)任务响应时间慢,高优先级的任务已经进入就绪状态,但是还不能运行
(2)非抢占式内核的任务响应时间不确定,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决上一个进程什么时候释放CPU的控制权。

linux kernel就是非抢占式。
RTOS多设置为抢占式。

三、重入型函数和不可重入型函数
在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,比如函数中的变量等。我进程A使用全局变量x,还没有使用完x的结果,就调用了进程B,那么我进程B如果也使用了全局变量x,那么就会导致x最后结果不确定。从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。

相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。

这也就是为什么,驱动中我们尽量少使用全局变量,因为多个同类设备,可能使用一个驱动,反复调用,如果驱动中使用了全局变量,那么每个设备调用的驱动都能更改这个全局变量,那么最后这个变量的结果就不确定了。

标签:调用,抢占,操作系统,任务,内核,CPU,函数
From: https://www.cnblogs.com/solo666/p/17838112.html

相关文章

  • 二、RHEL8操作系统安装
     一、如何安装rhel的操作系统? 必要的前提条件:硬件(CPU、内存、硬盘……)+安装介质(操作系统的安装文件) 会不会把自己的笔记本装成rhel的操作系统呢?不会 使用虚拟机软件虚拟出一套虚拟的计算机硬件,然后将操作系统装在上面,Vmwareworkstation虚拟机软件 ......
  • 【操作系统MIT 6.1810(2022版)笔记】Lab实验:环境搭建——以Ubuntu20.04为例
    感觉环境搭建没有别人说的那么难。我是双系统用户(Win+Ubuntu20.04),所以直接在Ubuntu上搭建了。听别人说不要用Ubuntu18.04搭建,不知道为什么参考链接:官网环境搭建教程环境搭建打开终端,输入以下命令并回车运行sudoapt-getinstallgitbuild-essentialgdb-multiarchqemu-s......
  • Linux操作系统优化 I/O调度,透明大页,swap,NUMA
    I/O调度的4种算法对于固态硬盘来说使用NOOP是最好的,DeadLine次之,而CFQ效率最低。CFQ(完全公平排队I/O调度程序)特点:在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,......
  • 操作系统锁的基本认识
    一、互斥锁和自旋锁互斥锁:​ 最底层的两种就是会「互斥锁和自旋锁」,有很多高级的锁都是基于它们实现的,可以认为它们是各种锁的地基,所以我们必须清楚它俩之间的区别和应用。​ 加锁的目的就是保证共享资源在任意时间里,只有一个线程访问,这样就可以避免多线程导致共享数据错乱的问......
  • Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力
    WebAssembly(通常缩写为Wasm)是一种为网络浏览器设计的低级编程语言。它旨在提供一种比传统的JavaScript更快、更高效的方式来执行代码,以弥补JavaScript在性能方面的不足。通过使用二进制格式,WebAssembly能够提供比传统JavaScript更快的解析和执行速度。原文链接:https......
  • 银河麒麟操作系统搭建 Python 环境及相关问题记录
    银河麒麟操作系统搭建Python环境及相关问题记录银河麒麟安装参考教程点击创建新的虚拟机,然后按照下图进行配置即可。然后一直点击下一步即可;anaconda安装首先进入Anaconda镜像界面[1],寻找目标安装版本链接;然后按照下述命令在线下载Anaconda:wgethttps://re......
  • 操作系统(9)---存储管理
    一、引入1.计算机体系结构  2.内存层次 存储管理,也可以称为内存管理,其特点主要有:抽象(拥有逻辑地址空间),保护(每个进程都有独立的地址空间),共享(可以访问相同内存),虚拟化(虚拟存储)。存储管理主要要解决两个问题:1.存储空间如何分配?(连续分配,非连续分配)......
  • 01_实验一_操作系统的启动start
    实验一操作系统的启动从源代码到可运行的操作系统(前置知识)API与SDK以C语言编写的操作系统为背景进行介绍,EOS是由C语言编写的操作系统和应用程序之间一个重要的纽带就是应用程序接口(简称API)。操作系统通过开放API为应>用程序提供服务,应用程序通过使用这些API......
  • 国产首款IDE环境:数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新
    参考:https://www.youtube.com/watch?v=fOpBEWZVKU0   在中国it历史上继“木兰编程语言(实际上套壳Python),红旗操作系统(实际上套壳Chrome),汉芯(虚假芯片),鸿蒙操作系统(安卓套壳)”后又推出了一款由数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新的集成开发环......
  • JVM 里 new 对象时,堆会发生抢占吗?JVM是怎么设计来保证 线程安全的?
    会。假设JVM虚拟机上,每一次new对象时,指针就会向右移动一个对象size的距离,一个线程正在给A对象分配内存,指针还没来得及修改,另一个为对象B分配内存的线程又引用了这个指针来分配内存,这就发生了抢占。有两种方案来解决这个问题:1、CAS采用CAS分配重试的方式来保证更新操作的原子性2、TL......