kernel知识整理(一)

1 篇文章 0 订阅

自旋锁(spin lock)

自旋锁是一种用于保护多线程共享资源的锁,与一般的互斥锁的不同之处在于自旋锁在尝试获取锁时以等待的形式不断的循环检查当前的锁是否可用。
在多CPU的环境中,对持有锁较短的程序来说,使用自旋锁代替一般的互斥锁能够提高程序的性能

自旋锁的主要特征

当自旋诉被一个线程持有的时候,就不可以被其他线程获取,如果其他的线程常识去获取pthread_spin_lock()获得该锁,那么他将不会从改函数返回,而是一直自旋,直到当前的自旋锁可用为止
使用自旋锁的注意事项

  • 由于自旋时仍然需要占用CPU,因此持有自旋锁的线程需要尽快释放自旋锁,否则一直处于自旋的状态会浪费CPU的时间
  • 持有自旋锁的线程在sleep之前应当释放自旋锁,否则如果持有自旋锁的线程SLEEP会导致整个系统被挂起
自旋锁与互斥锁的区别

在CPU内核中,假设一个双核的机器上同时运行了两个线程,分别运行在core0与core1上,假设线程A通过pthread_mutex_lock操作来得到临界区的锁,此时该锁被线程B持有,那么线程A就会出于阻塞状态(blocking),core0会在此时进行上下文切换,将线程A置于等待队列中,此时Core0就可以执行其他任务而不必忙于等待,但spin——lock属于busy_waiting的锁,如果线程A是使用pthread_spin_lock操作去请求锁,那么线程A就会一直在Core0上进行忙等待并不停的进行锁请求,直到得到这个锁为止。
对于自旋锁来说,它只需要消耗很少的资源来建立锁;随后当线程被阻塞时,它就会一直重复检查看锁是否可用了,也就是说当自旋锁处于等待状态时它会一直消耗CPU时间。
对于互斥锁来说,与自旋锁相比它需要消耗大量的系统资源来建立锁;随后当线程被阻塞时,线程的调度状态被修改,并且线程被加入等待线程队列;最后当锁可用 时,在获取锁之前,线程会被从等待队列取出并更改其调度状态;但是在线程被阻塞期间,它不消耗CPU资源。
因此自旋锁和互斥锁适用于不同的场景。自旋锁适用于那些仅需要阻塞很短时间的场景,而互斥锁适用于那些可能会阻塞很长时间的场景。

MPU适用场景

安全管理

未受信任或者风险较高的软件部件,应该运行在非特权等级。MPU可以限制这些部件访问的存储器空间
用作通信缓冲RAM空间中可能包含通信注入的恶意代码,MPU可以将存储器空间定义为不可执行。

系统可靠性

1.在多任务系统中,MPU可以定义应用任务栈的合法存储器空间,使得任务不会破坏其他任务或OS数据栈的空间
2.若应用具有较高的安全需求,则MPU可以将栈空间最终定义为不可访问的存储器空间,可以用来检测栈溢出。
3.有些程序可能需要将代码复制到SRAM中执行,或者将向量表复制到SRAM中执行,或者将向量表复制到SRAM中来提高访问速度,复制完代码或向量后,存储器就被定义为只读,防止存储器空间被意外篡改

存储器属性管理

1.可以利用MPU来定义可被缓存的存储器空间,以及存储策略
2.利用MPU配置覆盖掉某个存储器空间的默认配置
3.根据具体的项目需要,来选择MPU是默认配置还是需要修改配置

DRAM SRAM

DRAM用作内存比较多,SRAM用作cache比较多。

从名字上看,SRAM与DRAM的区别只在于一个是静态一个是动态。SRAM不需要刷新电路就能够保存数据,所以具有静止存取数据的作用。而DRAM则需要不停地刷新电路,否则内部的数据将会消失。cache追求的是速度所以选择SRAM,而内存则追求容量所以选择能够在相同空间中存放更多内容并且造价相对低廉的DRAM。在我们的PC待机时消耗的电量有很大一部分都来自于对内存的刷新。

为啥DRAM需要不断的刷新?

DRAM的数据实际存放在内存中。电容放久了内部的电荷会减少,对外形成不了电位的变化,且当对DRAM执行读操作的时候需要将电容与外界形成回路,通过检查是否有电荷流进或流出来判断该bit是1还是0.所以读操作破坏了原来的数据,需要在读操作结束后将数据写回到DRAM中,在整个读写操作中,计算机都会对DRAM进行刷新

ROM 与 RAM

ROM与RAM都是半导体存储器,ROM在系统停止供电时仍然可以保持数据,而RAM通常在系统掉电之后丢失数据,典型的RAM为计算机的内存。
RAM
RAM主要有两个大类,一种称为静态RAM(SRAM),SRAM的速度非常快,通常用作 CPU的一级缓冲,二级缓冲(cache),另一种称为动态RAM(DRAM),DRAM保留数据的时间很短,速度也比SRAM慢
DDRAM
DDRAM(Date-Rate RAM)也称作DDR SDRAM,这种改进的RAM和SDRAM基本相同,不同之处在于它可以在一个时钟读写两次数据,显著加快了数据的传输速度,是目前电脑中用的最多的内存

watchdog

简而言之,watchdog就是为了保证系统正常运行,或者从死循环,死锁等状态中退出的一种机制
看门狗又分为硬件看门狗和软件看门狗。硬件看门狗是利用定时器电路,他的定时输出连接到电路的复位端,程序在一定的时间范围内对定时器清零(“喂狗”),在程序正常工作时,定时器不会发生溢出,因此不会产生复位信号,若程序发生故障,没有在定时器周期内复位watchdog,这就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理相同,只是将硬件电路上的定时器用处理器的内部定时器代替,能够简化硬件电路设计,但可靠性不如硬件定时器,例如定时器自身发生故障无法检测。
软件看门狗分为两种,一种是基于时钟中断的普通看门狗,一种是检测hard lockup的NMI狗

产生软狗的原因

1.频繁处理硬中断以至于没有时间正常调度
2.长期处理软中断
3.对于非抢占式内核,某个线程长时间执行不触发调度

产生NMI狗的原因

1.长期处理某一个硬中断
2.长时间在禁用本地中断下处理

硬狗

用来检测所有的CPU是否正常运行
任何一个CPU都可以来喂狗,当在一定时间内没有核喂狗,触发硬狗复位
产生原因:
1.CPU(没有软狗,NMI狗触发条件)全部挂死
2.CPU之间存在硬件依赖关系,某一个CPU挂死,又软件层面的共享资源。

inode是什么

inode属于文件存储

文件存储在硬盘上,硬盘的最小存储单位叫扇区,每个扇区存储512个字节,即0.5KB
操作系统在读取硬盘的时候,不会一个个扇区进行读取,效率低下,而是一次性读取多个连续的扇区,即一次性读取一个块(block),这种由多个扇区组成的块,称之为文件存取的最小单位,块的大小通常为4KB,八个连续的sector组成一个block。
文件数据存储在块中,还必须找一个地方来存储文件的元信息,例如文件的创建者,文件的创建日期,文件的大小等。这种存储文件元信息的区域就被称作inode,也被称为索引节点。

  • 文件的字节数
  • 文件拥有者的UserID
  • 文件的GroupID
  • 文件的读,写执行权限
  • 文件的时间戳
  • 文件数据Block的位置
    stat example.txt可以查看文件的inode信息
inode的大小

inode会消耗硬盘空间,所以在硬盘格式化的时候,操作系统自动将硬盘划分为两个区域,数据区存放文件数据,另一个是inode,存放inode包含的信息。
每个inode节点的大小,一般为128字节或256个字节。inode节点的总数在格式化时就给定,通常为每1KB或2KB设置inode
由于每个文件都必须有一个inode,有可能出现inode用光,硬盘还没存满的情况。

inode号码

每一个inode都有一个号码,操作系统使用inode号码来识别不同的文件

在操作系统内部,系统首先找到文件名对应的inode号码,其次通过inode号码获取inode信息,最后根据inode信息找到文件数据存放的block

Cache Write Miss

在开启cache时,可能出现Write Miss 错误,在出现这种情况的时候,通常有两种解决办法:Write Allocate & No Write All;前者先将存储器内容LOAD到Cache,然后走Write Hit过程,更新Cache。然而No Write Allocate,就是在Cache Miss之后,直接写入存储器,此时Cache中依然没有存储出存储器的相关内容。
一般情况下Write Back采用Write Allocate的Write Miss策略,即cache命中,则更新cache(并不更新存储器的内容),若不命中,则LOAD存储到Cache,然后更新Cache
而Write Through则一般采用No Write Allocate 策略,如果命中,更新Cache,更新存储器的相关内容,若不命中,则只更新存储器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Linux 是一种开源的操作系统,最初由芬兰的林纳斯·托瓦兹(Linus Torvalds)创建并发布。 2. Linux 分为内核(kernel)和发行版(distribution)。内核是操作系统的核心组件,而发行版则是将内核与其他软件包整合在一起并提供给用户使用的版本。 3. 常见的 Linux 发行版有 Ubuntu、Debian、Fedora、CentOS、SUSE 等。 4. Linux 的文件系统采用层次式结构,以根目录(/)作为起始点,其下有各种目录,例如 /bin(存放可执行二进制文件)、/etc(存放配置文件)、/home(存放用户文件夹)等。 5. Linux 支持多用户和多任务的操作。每个用户都有自己的用户名和密码,并且可以在同一时间进行多个任务。 6. Linux 使用 shell 来与用户进行交互,常见的 shell 有 Bash、Zsh 等。通过 shell,用户可以执行命令、管理文件和目录、配置系统等。 7. Linux 支持各种网络协议,可以作为服务器来提供各种服务,例如 Web 服务器(如 Apache)、邮件服务器(如 Postfix)、数据库服务器(如 MySQL)等。 8. Linux 提供了丰富的命令行工具和脚本语言,可以进行自动化任务、批量处理等操作。 9. Linux 提供了强大的安全性和权限控制机制,可以对文件、目录和用户进行权限管理,以保护系统的安全。 10. Linux 社区庞大活跃,有大量的开源软件和工具可供使用和学习,并且有丰富的文档和在线资源可供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值