logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Linux内核5. 中断和中断处理

我们先来看一下中断的定义:中断机制:CPU在执行指令时,收到某个中断信号转而去执行预先设定好的代码,然后再返回到原指令流中继续执行,这就是中断机制。可以发现中断的定义非常简单。我们根据中断的定义来画一张图:在图灵机模型中,计算机是一直线性运行的。加入了中断之后,计算机就可以透明地在进程执行流中插入一段代码来执行。那么这么做的目的是什么呢?本文我们从中断的概念开始讲起,一路上分析了中断的作用、中断的

#linux#运维#服务器
Linux内核4. 系统调用

计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)。在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。一般情况下应用程序

#linux
Linux内核8. 调试

Linux内核设计与实现 第18章 调试《Linux内核设计与实现 》阅读笔记调试工作艰难是内核级开发区别于用户级开发的一个显著特点。相比于用户级开发,内核调试的难度确实要艰苦得多。更可怕的是,它带来的风险比用户级别更高,内核的一一个错误往往立刻就能让系统崩溃。驾驭内核调试的能力(当然,最终是为了能够成功地开发内核)很大程度上取决于经验和对整个操作系统的把握。没错,玉树临风可能会对别的事情有帮助,

#linux
Linux内核5. 中断和中断处理 补充

原因之一就是上面提到的,它是静态编译的, 靠内置的 ksoftirqd 线程来调度内置的那 9 种 softirq。如果想新加一种,就得修改并重新编译内核, 所以开发成本非常高。前面已经看到, Linux 在每个 CPU 上会创建一个 ksoftirqd 内核线程。softirqs 是在 Linux 内核编译时就确定好的,例外网络收包对应的。这也是一种推迟执行机制,与 tasklet 有点类似,但

#linux#运维#服务器
Linux内核7. 内存管理

一、内存管理概览1.1 内存管理的意义外存是程序存储的地方,内存是进程运行的地方。外存相当于是军营,内存相当于是战场。选择一个良好的战场才有利于军队打胜仗,实现一个完善的内存管理机制才能让进程多快好省地运行。如何更好地实现内存管理一直是操作系统发展的一大主题。在此过程中内存管理的基本模式也经历了好几代的发展,下面我们就来看一下。1.2 原始内存管理最初的时候,内存管理是十分的简陋,大家都运行在物理

#linux
Linux内核2. Linux进程管理

一、进程基本概念进程与线程进程是操作系统分配和管理系统资源的基本单位。进程本来也是程序执行的基本单位,但是自从有了线程之后就不是了。现在线程是程序执行的基本单位,代表一个执行流,一个进程可以有多个执行流。最初的时候,一个进程就只有一个执行流,也就是主线程,此时进程就是线程,线程就是进程。当程序需要多个执行流的时候,采取的都是多进程的方式。但是创建一个新进程是一个很耗费资源的事情,而且多个进程之间还

#linux
Linux内核3. 抢占机制

Linux 内核源码schedule的注释写的非常精炼,所以就不啰嗦了,直接上源码,/**/

#linux
Linux内核1:体系结构和内核结构 驱动

内核启动初始化时的main.c文件中的kernel_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type),注册了一条platform总线(虚拟总线,platform_bus)。不同类型的驱动,其match函数是不一样的,这个platform的驱动,比较的是dev和drv的

文章图片
#linux
Linux内核3. 进程调度

调度器选择下一个实时进程时,如果当前处理器的实时运行队列中的进程的最高调度优先级比当前正在执行的进程的调度优先级低,将会试图从实时进程超载的处理器把可推送实时进程拉过来。有一点值得注意,如果优先级低的进程占有实时互斥锁,此时又有优先级高的进程等待实时互斥锁,这时会把占有实时互斥锁的进程的优先级临时提高到等待实时互斥锁的进程的优先级,这个现象叫优先级继承。限期调度类的处理器负载均衡简单,调度选择下一

#linux#单片机#stm32
Linux内核2. Linux进程管理 进程栈、线程栈、内核栈、中断栈

由于线程的 mm->start_stack 栈地址和所属进程相同,所以线程栈的起始地址并没有存放在 task_struct 中,应该是使用 pthread_attr_t 中的 stackaddr 来初始化 task_struct->thread->sp(sp 指向 struct pt_regs 对象,该结构体用于保存用户进程或者线程的寄存器现场)。可见每个任务都有自己的栈空间,正是有了独立的栈空间

#linux#运维
    共 94 条
  • 1
  • 2
  • 3
  • 10
  • 请选择