12 世界非世界,是名世界!

尚未进行身份认证

我要认证

众生皆菩萨,菩萨皆众生!

等级
TA的排名 4k+

Linux内核学习笔记 -33 内核同步机制

2020-08-10 18:10:10

Linux内核学习笔记 -32 内核同步概述

如果我们把内核看作不断对各种请求进行响应的服务器,那么正在CPU上执行的进程,发出中断请求的外部设备等就相当于客户,正如服务器要随时响应客户的请求一样,内核也会随时响应进程/中断/系统调用等的请求,我们之所以这样比喻,是为了强调内核中的各个任务并不是严格按照顺序依次执行的,而是相互交错执行的。对所有的内核任务而言,内核中的很多数据都是共享资源,就像高速公路供很多车辆行驶一样,对这些共享资源的访问必须遵循一定的访问规则,否则就可能造成对共享资源的破坏。就如同不遵守交通规则会造成撞车一样。并发执行是..

2020-08-10 17:54:54

Linux内核学习笔记 -31 动手实践-添加系统调用(系统调用日志收集系统)

基于linux 5.0内核添加一个系统调用,

2020-08-09 11:01:56

Linux内核学习笔记 -30 Linux系统调用机制

系统调用实际上是内核的出口,系统调用顾名思义就是操作系统提供给用户程序调用的一组特殊接口,从逻辑上来说,系统调用可以被看成是一个内核与用户空间程序交互的接口,它好比一个中间人,把用户空间的请求传达给内核,在内核把请求处理完以后,再将处理的结果返回给用户。上图就可以看出,open系统调用跟内核交互的过程如何知道一个进程到底调用了哪些系统调用?这里给出一张图,这张图是linux系统中各个子系统相关的工具,左上角是strace工具,可以通过这个命令,我们就可以查看一个应用它所调用的所有的系统调用。比如..

2020-08-09 09:13:15

Linux内核学习笔记 -29 动手实践 - 中断下半部的代码分析与应用

Linux将中断处理分为上下两部分,上半部分主要处理紧急的,必须马上处理的事情,下半部分处理不那么紧急的事情,linux内核也提供了相应的机制,这里使用理论课中的tasklet机制来进行实验。本节代码是在上节的基础上稍微增加一部分代码即可。首先在中断服务例程,即上半部分中添加tasklet的init函数,即将下半部分函数进行注册。最主要的是要将下半部分处理函数挂载上去。最后调用tasklet_schedule函数进行调度最后用到tasklet_kill,用来注销掉我们的taskletboo

2020-08-08 21:35:35

Linux内核学习笔记 -28 动手实践 - 中断上半部的代码分析与应用

中断常见的应用是在驱动程序中,例如我们的键盘鼠标,每次我们的点按都会产生一个中断,从而让计算机识别。该实验是自己虚拟出一个设备,将该设备注册到系统中,之后用自己编写的中断服务例程来使用中断,首先看一下当前系统中的中断。第一列:IRQ号CPU0/CPU1分别是当前CPU上发生中断的次数下一列:中断控制器名称,比如IO-APIC下一列:设备名称,比如2-edgebook@100ask:~/Mooc/CH05$ cat /proc/interrupts CPU0

2020-08-08 19:30:58

Linux内核学习笔记 -27 Linux中的各种API

如果将内核比作一个工厂,那么Linux中,众多的接口就是通往这个工厂的高速公路,这条路要足够坚固,经得起各种破坏,要能跑得了卡车,又能升降飞机,当然这条路要越宽越好,如上图所示,linux中有四种类型的接口,应用编程接口API,应用二进制接口ABI内核内部的API和ABI图中的ABI中提到了LSB,什么是LSB?目前Linux的发行版非常多,为了促进linux不同发行版本间的兼容性,LSB开发了一系列标准,使得各种软件可以很好地兼容LSB标准的系统上运行,从而可以帮助软件供应商更好的..

2020-08-07 21:42:30

Linux内核学习笔记 -26 Linux时间系统

时钟中断是特别重要的一个中断,因为整个操作系统的活动都受到它的激励。系统利用时钟中断维持系统时间,促使进程的切换,以保证所有的进程共享CPU。利用时钟中断进行记账,监督系统工作以及确定未来的调度优先级工作,可以说“时钟中断”是整个操作系统的脉搏。基本的时钟硬件:Linux系统OS时钟的物理产生原因是什么?是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU以后,就可以引发一个中断请求信号,我们就把它叫做时钟中断。时钟中断的周期也就是脉冲信号的周期,我们叫做“滴答”或“节拍”(tick)。从本.

2020-08-06 21:46:43

Linux内核学习笔记 -25 中断下半部处理机制

中断服务程序一般都是在中断请求关闭的情况下执行的,以避免嵌套而使中断控制复杂化,但是中断是一个随机事件,它随时会到来,如果关中断的事件太长,CPU就不能及时响应其它中断请求,从而造成中断的丢失,因此内核的目标就是尽可能块的处理完中断请求,尽可能把更多的处理向后推迟。如上图,中断基本模型。在中断向量表中填入中断处理程序的入口地址,然后跳到该程序执行随着系统的不断复杂,中断处理函数要做的事情也越来越多,多到都来不及接收新的中断,于是发生中断丢失,这显然是不行的,于是内核把中断分为两部分,一个叫上半部..

2020-08-05 21:16:39

GPON学习笔记[转],防失联

GPON技术学习(一)--------GPON系统整体概况GPON技术学习(二)----------GPON基本概念GPON技术学习(三)----------GPON传输汇聚层GPON技术学习(四)----------GTC成帧GPON技术学习(五)----------ONU七种状态...

2020-08-05 06:40:04

Linux内核学习笔记 -24 中断处理机制

中断描述符表IDT放在内核的数据段中,它的起始地址放在中断描述符表寄存器,即IDTR中,如上图蓝色箭头所示。在内核中中断描述符相关的源代码是什么样子?有一个变量IDT_DESCR,它存放在head_32.S,或者在64位系统中存放在head_64.S中,这里面有两个汇编语句,第一句表示中断描述符表包含256个中断描述符;第二句表示中断描述符的入口地址如何对中断描述符初始化?在linux内核中,在系统的初始化阶段首先要初始化可编程控制器,将中断描述符的起始地址装入到中断描述符表寄存器IDTR中..

2020-08-05 06:21:50

Linux内核学习笔记 -23 中断机制概述

当中断发生的时候,CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点继续执行被打断的程序。听起来很简单,但实际上中断是操作系统的脉搏,是并发处理的基础,远不像概念这么简单为什么可以并行呢?当CPU启动设备进入输入输出后,设备便可以独立工作了,CPU转去处理自己的事情,当设备完成输入输出后,通过向CPU发出中断,报告此此输入输出的结果,让CPU决定如何处理以后的事情。这些从概念上说起来是比较简单的,工程实践起来远没这么简单CPU收到中断信号以后,并不立即..

2020-08-04 21:10:05

Linux内核学习笔记 -22 阶段习题

目录第一章 绪论第二章 内存寻址第三章 进程管理第四章 内存管理第一章 绪论1. Linux得以流行,是因为遵循了POSIX标准2.从Linux操作系统的整体结构来看,分两大部分,用户空间的应用程序和内核空间的os内核,二者之间是一种c/s结构,os是服务者,应用程序是客户,是一种请求和响应的关系。3.关于linux/unix中系统调用提供的只是一种机制,而不是策略。4.内核源码中的双向链表和哈希表都相当于内核源码中的基本类型,对其操作只需要调用内核提供...

2020-08-03 22:56:39

Linux内核学习笔记 -21 动手实践linux内存映射基础 - 下(用户测试进程,及测试进程的演示)

下面为用户程序代码,一个是读程序,一个是写程序。读程序中,将展示进程在用户态直接读取到我们在内核态写入内存的数据。而在写程序中,我们将展示进程在用户态直接向内核申请的内存区写入数据。下面是读程序代码,读程序中,首先要做的是打开设备文件,open()紧接着调用mmap系统调用,这是用户态的mmap函数,它第一个参数是映射区的地址,第二位是映射区的长度(LEN),接下啦是port的一个标志位,表示期望的内存保护标志,PROT_READ表示页内容可以被读取;紧接着是flags标志位(MAP_PRIV.

2020-08-03 00:14:01

Linux内核学习笔记 -20 动手实践linux内存映射基础 - 中(驱动程序源码分析)

进入源码,看内存映射具体的实现过程。驱动程序源码map_driver.c驱动程序大概有三部分组成,1-模块的装载卸载; 2-file_operations结构体和mmap函数;3-vm_operations_struct结构体和fault函数。首先是模块的装载函数,它所要完成的工作是两个,设备的注册,在内核中为设备申请一块内存。设备的注册由register_chrdev这个函数来实现,这里需要指定设备的主设备号MAP_DEV_MAJOR, 设备的名称MAP_DEV_NAME, 还有它所链接的fil.

2020-08-02 20:50:14

Linux内核学习笔记 -19 动手实践linux内存映射基础 - 上

mmap是一种内存映射文件的方法,将一个文件映射到进程的地址空间,建立文件磁盘地址和进程虚拟地址的一种对应关系,如此进程通过读取相应的虚拟地址就可以直接读取相应文件中的内容。这样映射的最大好处是进程可用直接访问内存,避免了频繁的使用read/write等文件系统的系统调用,需要注意的是mmap并不分配物理内存,它所做的最重要的工作就是为进程映射区的虚拟地址建立页表项从图上可以看出进程的虚拟地址空间,是由多个虚拟内存区域构成的。如图所示的text数据段,初始数据段,bss数据段,堆,栈都是一个个独..

2020-08-01 19:04:04

Linux内核学习笔记 -18 物理内存分配与回收机制 - 下

从用户进程发出内存分配请求开始,到内核最终分配到物理内存,这中间内核要做大量的工作。上一讲中,概要的介绍了vmalloc和kmalloc,最终都要调用伙伴算法,通过get_free_page函数内核获得物理内存目前有两种计算机,分别以不同的方法来管理物理内存。NUMA计算机:多处理器计算机,每个CPU都有自己的本地内存,这种划分每个CPU都能以较快的速率访问本地内存,各个CPU之间通过总线连接起来,这样也可访问其它CPU的本地内存,只不过速度略慢而已UMA计算机:将可用的内存以连续的..

2020-08-01 17:24:48

【转】MTK方案GPON ONU注册流程和OMCI分析

进入串口登录:输入以下指令 开启GPON ONU OMCI报文调试指令:echo msg init 1 > /proc/gpon/debugecho msg oam 1 > /proc/gpon/debugecho msg err 1 > /proc/gpon/debugecho msg omci 1 > /proc/gpon/debugONU 激活概述ONU的激活过程由OLT控制,其激活过程大致如下:1.ONU 通过 Upstream_Overhead 消息接收工作参数

2020-08-01 12:31:04

Linux内核学习笔记 -17 物理内存分配与回收机制 - 上

当我们说一个进程在执行的时候,从操作系统的角度看,一个进程最关键的特征是它拥有独立的虚拟地址空间,创建并执行一个进程通常需要执行如下步骤:第一步:建立可执行文件与虚拟地址空间的映射。当执行一个程序时,加载器读取的是可执行文件的头部,建立虚拟空间和可执行文件的映射,主要调用了do_mm_map()函数。同时虚拟地址空间所需的数据结构mm_struct结构和vm_area_struct结构也填充相应的值,如上图左边的虚拟内存部分第二部分:将指令寄存器设置为可执行文件入口,并启动运行。当...

2020-08-01 12:18:06

Linux内核学习笔记 -16 进程用户空间管理机制

每个进程都有自己独立的地址空间,那么进程的地址空间到底是什么时候创建的? 实际上,当fork系统调用创建进程的时候,也就为该进程创建了完整的用户空间。如上图。这个用户空间是如何被创建出来的?通过copy或共享父进程的用户空间来实现,即内核内核调用copymm函数来实现。这样就为新进程建立了所有的页表何mm_struct结构。通常来说,每个进程都有自己的用户空间,但是如果调用clone函数,创建的内核线程只会共享父进程的用户空间。linux利用写时复制技术,来快速创建进程。写时复制技术到底..

2020-08-01 07:37:01

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。