自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1200)
  • 收藏
  • 关注

原创 Linux Ext2/Ext3/Ext4 文件系统分区

然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。

2024-02-26 20:37:52 523

原创 浅析Linux标准的文件系统(Ext2/Ext3/Ext4)

在 vi 的编辑会话期间,更改了该inode中的某些属性,当您完成操作并键入 :wq 时,将关闭并释放该 inode。Ext家族是Linux支持度最广、最完整的文件系统,当我们格式化磁盘后,就已经为我们规划好了所有的inode/block/metadate等数据,这样系统可以直接使用,不需要再进行动态的配置,这也是它最优秀的特点,不过这也是它最显著的缺点,磁盘容量越大,格式化越慢,centos7.x已经选用xfs作为默认文件系统,xfs是一种适合大容量磁盘和处理巨型文件的文件系统。du -sm 单位M。

2024-02-26 20:31:53 991

原创 【文件系统】实现一个小的文件系统

3. Linux内核自带的ramfs就是一个现成的小的文件系统,但它有两个问题导致无法领略实现一个文件系统的全过程。c.如何管理自身的接口,即何时以及如何操作vfs数据结构,inode,dentry,mount等对象。a.和POSIX系统调用有关的接口 即实现open/read/write的操作的接口。b.ramfs调用了大量的fs/libfs.c中的内核库例程,不纯碎。一个文件系统如果能实现上面三类接口,那它就是个完整的文件系统了。b.和底层介质有关的接口 即下接块设备层的接口。c.文件名最多8个字节。

2024-02-24 15:15:25 400

原创 Linux文件系统的实现

上面我们看到了存储设备的宏观结构。我们要深入到分区的结构,特别是文件在分区中的存储方式。文件是文件系统对数据的分割单元。文件系统用目录来组织文件,赋予文件以上下分级的结构。在硬盘上实现这一分级结构的关键,是使用inode来虚拟普通文件和目录文件对象。在Linux文件管理中,我们知道,一个文件除了自身的数据之外,还有一个附属信息,即文件的元数据(metadata)。这个元数据用于记录文件的许多信息,比如文件大小,拥有人,所属的组,修改日期等等。元数据并不包含在文件的数据中,而是由操作系统维护的。

2024-02-24 15:07:15 888

原创 Linux安全模块

Linux安全模块(LSM)是Linux内核的一个轻量级通用访问控制框架。本文介绍Linux安全模块(LSM)的相关背景,设计思想,实现方法;并说明如何使用Linux安全模块(LSM)来增强Linux系统的安全性:一方面是供内核开发人员和安全研究人员使用的接口,另一方面是供普通用户使用的模块,以及具体的使用方法。如果读者具有Linux内核和安全的相关背景知识,可以有助于对本文的理解;如果不具有,可以先阅读本文最后参考资料中列出的IBM dW上的三篇文章。1.相关背景介绍:为什么和是什么近年来Linux系统由

2024-02-23 17:16:47 874

原创 中断和中断处理程序

简单地说就是CPU在忙着作自己的事情,这时候硬件(比如说键盘按了一下)触发了一个电信号,这个信号。

2024-02-22 20:44:26 353

原创 Linux内核:文件描述符

因此,文件描述符为在该系列平台上进行设备相关的编程实际上提供了一个统一的方法。在UNIX/Linux平台上,对于控制台(Console)的标准输入,标准输出,标准错误输出也对应了三个文件描述符。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。maxfiles是每个进程的软文件极限,maxfiles_lim是每个进程的硬文件极限。对于每个进程,操作系统内核在u_block结构中维护文件描述符表,所有的文件描述符都在该表中建立索引。

2024-02-21 16:24:24 357

原创 Linux学习笔记之Linux启动引导过程

在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。当第二阶段的引导加载程序被装入 RAM 并执行时,通常会显示一个动画屏幕,并将 Linux 和一个可选的初始 RAM 磁盘(临时根文件系统)加载到内存中。在这个阶段中,第二阶段的引导加载程序会检测系统硬件、枚举系统链接的硬件设备、挂载根设备,然后加载必要的内核模块。主引导加载程序的工作是查找并加载次引导加载程序(第二阶段)。

2024-02-20 20:12:28 911

原创 profiling 与性能优化总结

我们发现,主线程大约有80%的时间花在了等待上,如上图中的红色框所示。其中user和system的含义是user CPU time和system CPU time, 之所以会把CPU的执行时间分为两个部分,是因为程序在运行时除了执行程序本身代码和一些库的代码,还会调用操作系统提供的函数(即系统调用,程序运行系统调用时有更高的权限),因此程序运行时通常会处于两种状态: 用户态和内核态: 内核态指的是CPU在运行系统调用时的状态,而用户态就是CPU运行非系统调用(即用户自己的代码或一些库)时的状态。

2024-02-20 14:33:41 775

原创 KVM虚拟化技术

KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

2024-02-19 14:33:55 857

原创 Linux内存管理之bootmem分配器

如果32个页框都使用了,则什么都不做。内核在初始化阶段使用的分配内存函数alloc_bootmem,alloc_bootmem_low,alloc_bootmem_pages,alloc_bootmem_low_pages都会调用__alloc_bootmem,只是一层封装,实际上是传递不同的参数调用__alloc_bootmem。bitmap存放在min_low_pfn开始的页框中,并将bitmap的每一位置1,表示所有的内存页保留(为1是表示bootmem分配器是不能分配该页框的,为0表示可以分配)。

2024-02-19 14:20:20 715

原创 SLUB和SLAB的区别

说是压缩技术,其实就是把kmem_cache中所有的slab缓冲区放回到node结点的部分空链表中(包括所有CPU当前正在使用的slab),然后node结点的部分空链表中的空闲的slab缓冲区释放掉,然后将node结点中的其他部分空slab缓冲区按照空闲对象数量进行重新排列,把空闲数量少的放在前面,空闲数量多的放在后面,这样空闲数量少的更容易被移去cpu的部分空链表。虽然这两个slab缓冲区的结构上有所不同,但其实际原理还是一样,每次分配或释放都会设置对象的下个空闲对象指针,让其指向正确的位置。

2024-02-19 14:08:56 892

原创 电源管理方案APM和ACPI比较

ACPI表示高级配置和电源管理接口(AdvancedConfigurationandPowerManagementInterface)。对于Windows2000,ACPI定义了Windows2000、BIOS和系统硬件之间的新型工作接口。这些新接口包括允许Windows2000控制电源管理和设备配置的机制。Windows2000具有电源管理功能,该功能可以让系统进入低电源消耗的"睡眠状态",如待机和休眠等,目的就是控制电脑的电源消耗。

2024-02-18 15:46:16 834

原创 什么是消息队列

解决方法是,通过发布订阅模型,订单服务在订单变化时发送一条消息到一个主题中,所有的下游子系统都订单主题,这样可以每个子系统都可以获得一份完整的订单数据。例如一个下单的信息需要同步多个子系统,每个子系统都需要保存订单的数据的一部分,如果光靠订单服务的团队去维护所有的子系统数据同步,代价太大。在高并发的情况,为了避免大量的请求冲击后端服务,可以使用消息队列暂存请求,后端服务按照自己的重能力,从队列中消费,例如秒杀、埋点场景。比较常见的分布式事务实现有。优点:性能好,稳定可选,有活跃的中文社区,实时性比较好,

2024-02-18 15:24:23 885

原创 linux进程间通信之共享内存篇

首先打开一个或者创建一个文件,并把文件长度设置为5个people结构大小,然后使用mmap函数,把该文件映射到进程空间,len设置为10个people结构的大小,请注意此时文件大小和映射到进程空间的地址并不一样,这是被允许的,进程空间设置的大小受文件大小的影响但不一定要等于文件的大小,以指定的格式向该映射内存中写入10个people的数据;由于父子进程特殊的亲缘关系,在父进程中先调用mmap(),然后调用fork,那么在fork之后,子进程继承父进程匿名映射后的地址空间,同样也继承mmap返回的地址;

2024-02-03 15:39:04 856

原创 Linux下进程间通信方式——共享内存

可能你会认为,可以改变一下written的使用方式,例如,只有当written为0时进程才可以向共享内存写入数据,而当一个进程只有在written不为0时才能对其进行读取,同时把written进行加1操作,读取完后进行减1操作。若共享内存的written为0,表示没有其他进程对共享内存进行读取,则提示用户输入文本,并再次设置共享内存中的written为1,表示写完成,其他进程可对共享内存进行读操作。IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值。

2024-02-03 15:16:00 904

原创 进程间通信的几种实现方式

下面主要简单了解一下,的几种实现方式!管道模型与软件生命周期模型——瀑布模型(Waterfall Model)很相似。所谓的瀑布模型,其实就是将整个软件开发过程分成多个阶段,往往是上一个阶段完全做完,才将输出结果交给下一个阶段。从管道的这个名称可以看出来,:用"|” 表示的管道,意思就是这个类型的管道没有名字,用完了就销毁了。竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。,这个类型的管道需要通过mkfifo命令显式地创建。就是这个管道的名称。

2024-02-02 15:35:46 379

原创 Linux嵌入式kgdb调试环境搭建

没错, 就是本文介绍的kgdb, 当然早期有kdb, 后面kdb合并到kgdb了, 作为kgdb的前端, 后面我们会介绍, 而kgdb工具跟开发板通信支持kgdboc(串口)和kgdboe(网络),但新版内核只整合kgdboc, 网络被废弃了, 所以下文我们只介绍串口通信。======================= 我的环境 ==========================当没有断点, 输入continue让系统跑的时候, 串口将不会被kgdboc占用, 所以控制台又可以用了。

2024-01-31 15:31:22 823

原创 利用GDB、KGDB调试应用程序及内核驱动模块

这几天看了一下linux内核提权的一个漏洞,里面涉及到了驱动程序漏洞及驱动调试内容,由于各类linux操作系统版本的不同,如果不能在自己机器上亲自调试驱动程序,可以说即使给了漏洞利用的POC源码也根本无法成功利用。因为内核漏洞的利用涉及到指令集的POC构造,不同内核版本模块加载指令地址不同,导致即使有POC也根本无法利用,只有在自己系统中亲自调试,才能做出相应的修改,达到内核漏洞利用的效果。这样就要求我们对linux内核驱动的调试过程,调试方法有个深入了解。

2024-01-31 15:21:29 924

原创 线程同步(POSIX)

如果互斥量已经上锁了,那么调用pthread_mutex_lock()的线程将会被阻塞直到互斥量被解锁。PTHREAD_MUTEX_INITALIZER,也可以通过pthread_mutex_init()函数来初始化。当然如果动态分配互斥量,那么在释放内存之前,需要调用pthread_mutex_destory(),这个函数不是释放内存的,是反向初始化的。在使用互斥量之前,必须初始化它。很明显可以看到,有时候是子线程正在打印,然后主线程抢夺去了设备进行打印,然后又被子线程抢夺,然后又被主线程抢夺回去。

2024-01-30 14:50:52 315

原创 Linux POSIX线程库中线程同步的三种常用方式

pthread_mutex_lock() 类似,不同的是在锁已经被占据时返回 EBUSY 而不是挂起等待。2、初始化互斥锁:预设互斥锁的初始值:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER(编译时初始化锁位解锁状态)1、定义一个条件变量(全局变量)由于条件变量需要互斥锁的配合,所以还需要定义一个线程互斥锁pthread_cond_t。1、定义一个互斥锁变量:pthread_mutex_t mutex;2、初始化集合中的每个信号量。

2024-01-30 14:44:33 322

原创 Linux C++的多线程编程

线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务

2024-01-29 15:33:38 951

原创 Linux多线程编程(不限Linux)

而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。是线程间方便的通信机制。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

2024-01-29 15:20:40 936

原创 Linux读写锁详解

多线程程序中,如果仅有少数线程会对共享数据进行修改,多数线程只是读取共享数据的值,就适合用读写锁解决“线程间抢夺资源”的问题。当有多个线程发出读请求时,这些线程可以同时执行,也就是说,共享数据的值可以同时被多个发出读请求的线程获取;当有多个线程发出写请求时,这些线程只能一个一个地执行(同步执行)。此外,当发出读请求的线程正在执行时,发出写请求的线程必须等待前者执行完后才能开始执行;当发出写请求的线程正在执行时,发出读请求的线程也必须等待前者执行完后才能开始执行。

2024-01-29 15:05:28 940

原创 如何理解Linux驱动中内核互斥锁

在循环中,也是先取得互斥锁原来的状态,在将其之为-1,判断如果可以获取(等于1),则退出循环,否则设置当前进程的状态为不可中断状态,解锁自身的自旋锁,进入睡眠状态,待被在调度唤醒时,再获得自身的自旋锁,进入新一次的查询其自身状态(该互斥锁的状态)的循环。信号量的count初始化为1,down()/up()也可以实现类似mutex的作用。了解何时使用自旋锁,何时使用互斥体(或信号量)对编写优良代码很重要,但是多数情况下,并不需要太多的考虑,因为在中断上下文中只能使用自旋锁,而在任务睡眠时只能使用互斥体。

2024-01-27 20:10:39 754

原创 Linux内核28-自旋锁

但是,大部分的内核资源加锁的时间可能仅为毫秒的几分之一,因此,释放CPU使用权再获取可能比一直等待更消耗时间。对于锁概念,我相信大家已经不陌生了,不论是实时嵌入式系统还是服务器上的操作系统,都使用了这个概念。从上面的代码可以看出,单核系统没有处于debug状态时,没有真正的锁在运行。的核心功能,就是判断自旋锁是否被占用,如果没被占用,尝试原子性地更新lock中的。所以,解锁的过程就是将head和tail不相等,且重新使能内核抢占的过程。函数执行的操作是把tail加1,并把之前的值记录下来,完成加锁操作。

2024-01-27 14:24:05 814

原创 linux 内核 --- 自旋锁(spinlock_t)

因为在不同的CPU核上出现中断不会暂停线程A的执行。对于没有打上Linux-RT(实时Linux)的patch的系统,spin_lock只是简单地调用raw_spin_lock,实际上他们是完全一样的,如果打上这个patch之后,spin_lock会使用信号量完成临界区的保护工作,带来的好处是同一个CPU可以有多个临界区同时工作,而原有的体系因为禁止抢占的原因,一旦进入临界区,其他临界区就无法运行,新的体系在允许使用同一个临界区的其他进程进行休眠等待,而不是强占着CPU进行自旋操作。

2024-01-27 14:15:24 922

原创 Linux内核模块编程基础知识

内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及IO设备)。/* 源文件myownfunc.c */");return 0;");

2024-01-26 15:12:17 444

原创 linux内核模块编程

除此之外,模块也可以拥有参数数组,形式为"module_param_array(数组名,数组类型,数组长,参数读/写权限)",在2.6.0~2.6.10版本,需将数组常变量名赋给"数组长",从2.6.10版本开始,需将数组长变量的指针赋给"数组长",当不需要保存实际输入的数组元数个数时,可以设置"数组长"为NULL。主题: linux内核模块的程序结构--模块加载函数(必须),模块卸载函数(必须),模块许可证声明(必须),模块参数(可选),模块导出符号(可选),模块作者的等信息声明(可选)

2024-01-26 14:58:46 915

原创 理解Linux网络栈:协议栈和网络编程

Linux网络栈是指在Linux操作系统中实现的网络协议栈,它包括了各种网络协议和网络编程接口,用于实现数据在网络中的传输和通信。下面将详细介绍Linux网络栈的组成结构、协议栈和网络编程的相关知识。

2024-01-25 14:42:53 909

原创 计算机网络基础 — Linux 内核网络协议栈

接收到一个数据包,在完成必要的检查和处理后,其将以 TCP 协议首部中目的端口号为索引,在 tcp_prot 对应的 sock 结构体之 sock_array 数组中得到正确的 sock 结构体队列,再辅之以其他条件遍历该队列进行对应 sock 结构体的查询,在得到匹配的 sock 结构体后,将数据包挂入该 sock 结构体中的缓存队列中(由 sock 结构体中的 receive_queue 字段指向),从而完成数据包的最终接收。每层协议都会检查报文首部中的协议标识,以确定接收数据的上层协议。

2024-01-25 14:31:22 926

原创 通俗易懂!快速了解虚拟文件系统(VFS)

VFS 设计的初衷就是要支持所有的文件系统,所以它的设计思想其实就是以面向对象的方式,设计一个通用的文件模型,出于效率考虑,VFS 还是 C 语言写的。的文件系统控制块,里面存放已安装文件系统的有关信息,换句话说,一个超级块描述了一个具体的文件系统信息,里面的信息十分重要,也叫元数据,与普通的文件数据相比,元数据丢失会损坏整个文件系统,导致无法挂载之类的问题。存放 dentry 与对应文件链接的有关信息,每个 dentry 代表路径中的一个特定部分,每个磁盘类文件系统以自己的方式将目录项信息存放在磁盘上。

2024-01-24 19:57:47 430

原创 Linux内核:异步机制

否则,不应该在进程的未决信号集中删除该信号(信号注销完毕)。早期Unix系统只定义了32种信号(这32种信号都有确定的用途和含义,并且每种信号都有各自默认的缺省操作,比如:按键盘的ctrl+c,会产生SIGINT信号,默认的缺省操作就是将 进程终止),这32种信号是非实时信号(非实时信号都不支持排队,都是不可靠信号),后32种信号是实时信号(实时信号都支持排队,都是可靠信号)当一个非实时信号发送给一个进程时,如果该信号已经在进程中注册,则该信号将被丢弃,因此会造成信号丢失(非实时信号又叫不可靠信号)。

2024-01-23 21:31:00 897

原创 剖析linux内核:中断处理流程

这里调用desc->handle_irq分为两种情况,一是单独的中断号的,一是共享中断号的,俩者的区别在于后者需要先判断是共享中断中的哪一个然后再真正的去调用handle_irq,所以我这里分析一下单独中断号的处理流程,共享中断也是一样可以分析。里面就一个request_threaded_irq函数,参数的话irq为中断号,handler为用户的中断函数,flags中断标识,name中断名称,dev可以是传递的参数可以是作为区分共享中断,对应irqaction结构中的dev_id。

2024-01-23 15:27:29 822

原创 探索Linux内核:中断和中断处理程序

上面的例程存在问题,因为其实现往往是简单禁止、允许中断(x86下,local_irq_disable cli指令,local_irq_enable sti指令),如果在这之前已经禁止中断,调用该例程后,将无条件恢复中断。上面3个函数调用可以嵌套,但在一条指定的中断线上,对disable_irq()和disable_irq_nosync()的每次调用,都需要相应地调用一次enable_irq()。此外,因为进程是以进程上下文的形式连接到内核中,因此,在进程上下文可以睡眠,也可以调用调度程序。

2024-01-23 15:14:37 946

原创 Linux下PCI设备驱动程序开发

PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备驱动程序的基本框架。

2024-01-22 19:59:58 1039

原创 小白自制Linux开发板 :Linux内核与文件系统移植

该界面和u-boot配置一样,所以操作方式也是一样的,上下键移动选项,使用空格键进行选中或取消选择,同样通过空格键或回车键,进入子选项配置,通过Tab键选择保存和退出即可返回上级菜单或命令行界面,也可以直接双击Esc键返回上级目录。退出TF卡,插入开发板,上电,按重启,我们就可以看到u-boot启动完成后,自动进入了内核启动环节,但是启动后一会就报错了,因为挂载文件系统产生错误。如图,图中的配置可能与读者实际内容不一致,这是因为我改了很多东西,忽略即可,只需要关注红色框中的内容即可。

2024-01-20 17:22:29 916

原创 linux内核内存管理

不管是用户空间还是内核空间,使用的地址都是虚拟地址,当需进程要实际访问内存的时候,会由内核的「请求分页机制」产生「缺页异常」调入物理内存页。进程初始化分配和操作的都是基于这个「虚拟地址」,只有当进程需要实际访问内存资源的时候才会建立虚拟地址和物理地址的映射,调入物理内存页。进程与内存,进程(执行的程序)占用的用户空间按照「 访问属性一致的地址空间存放在一起 」的原则,划分成。用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。访问属性指的是“可读、可写、可执行等。

2024-01-19 21:21:07 373

原创 深入理解Linux内核——内存管理

每当一个段描述符被装入段寄存器时,相应的段描述符就由内存装入到对应的非编程CPU寄存器中,从那时起,针对那个段的逻辑地址转换就可以不访问主存中的GDT或LDT,只有在段寄存器内容改变时,才有必要访问GDT或LDT。与段相关的线性地址从0开始,达到2^32-1的寻址限长,这意味着在用户态或内核态下的所有进程可以使用相同的逻辑地址。使用的级别数量取决于处理器的类型。所有段都从0x00000000开始,表示Linux下逻辑地址和线性地址是一致的,即逻辑地址的偏移量字段的值与相应的线性地址的值总是一致的。

2024-01-19 21:07:48 426

原创 Linux内核进程管理与调度:策略优化与实践分析

今天给大家上点硬货,关于Linux的进程管理和调度是学习和理解Linux的必学知识。为协调多个进程 "同时" 运行,现代操作系统通常使用进程优先级这一基本手段。每个进程都有一个与之相关的优先级,如果有多个可执行的进程等待CPU资源,那么具有更高优先级的进程将优先被调度执行。今天就给大家讲解一下Linux内核中的进程管理和调度,文章内容较长,大家记得先赞后看。

2024-01-19 16:05:41 466

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除