首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
linux内核设计与实现 总结
2024-09-05
Linux内核设计与实现 总结笔记(第九章)内核同步介绍
在使用共享内存的应用程序中,程序员必须特别留意保护共享资源,防止共享资源并发访问. 一.临界区和竞争条件 1.1 临界区和竞争条件 所谓临界区就是访问和操作共享数据代码段.多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子地执行. 如果两个执行线程有可能处于同一个临界区中同时执行,如果这种情况确实发生了,我们就称它是竞争条件.因为竞争引起的错误非常不易重现,所以调试这种错误才会非常困难. 避免并发和防止竞争条件称为同步. 为什么要保护? 有些事务
《linux内核设计与实现》实践之模块及深入
<linux内核设计与实现>实践之模块及深入 写在前面的话. 基础模块部分我已经做完了,设计到的知识点无非就是,编写模块代码,编写Makefile文件,加载模块和卸载模块部分.由于大家都写了这部分的博客,我也就不再赘述,我重点想写一下,页表模块的深入和改进. 一.编写代码 二.编写Makefile文件 三.加载模块,尝试运行 查看gedit进程号可知为pid = 18968 查看gedit的起始地址0x0804880c 转化为10进制数为134514700,即va = 134514700 出
《Linux内核设计与实现》CHAPTER13阅读梳理
<Linux内核设计与实现>第13章阅读总结 [edited by 5216lwr] 一.虚拟文件系统概述 1.虚拟文件系统 (也称作虚拟文件交换或VF)作为内核子系统,为用户空间程序提供了文件和文件系统相关的接口.通过虚拟文件系统,程序可以利用标准的Uinx 系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作. 2.通用原理 之所以可以使用这种通用接口(VF)对所有类型的文件系统进行操作,是因为内核在它的底层文件系统接口上建立了一个抽象层. 该抽象层使Linux 能够支持各种文件
《Linux内核设计与实现》CHAPTER17阅读梳理
<Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理&思考 1.什么是模块?为什么需要模块?它和设备有什么关系? 首先,一个操作系统(这里以Linux系统为例)会关联很多设备,从大家比较熟悉的键盘.打印机,到硬盘.光盘,再到比较专业的一些电路板设备.机械设备以及其他设备:操作系统必须能够向这些设备发出有效指令以便于操控,同时还要根据各个设备能接受的指令差
《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分为两种: 抢占式多任务:Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 现代操作系统提供:动态时间片计算的方式:可配置的计算策略 非抢占式多任务:除非进程自己主动停止运行,否则会一直
《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有内存映射的内存地址空间或执行线程等其他资源. 线程:是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程而非进程.操作系统中进程提供两种虚拟机制:虚拟存储器和虚拟内存. 程序:本身并不是进程,进程是处于执行期的程序以及相关的资源的总称.不同的进程可以执行同一个程
《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一些资深的特殊功能 健壮性 在任何时候内核的任何地方都能调用printk()函数,只有在终端还未初始化的时候不能调用. 在中断上下文和进程上下文中被调用 在任何持有锁时被调用 在多处理器上同时被调用,并且不必使用锁. 解决办法是提供一个变体函数early _ printk(),但这种办法在某些硬件体系结构上无法
《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保证了系统的稳定和安全. 实现多任务和虚拟内存.保证良好的稳定性和安全性. 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,是内核唯一合法的入口. API.POSIX和C库 应用程序通过在用户空间实现的应用编程接口(API)而非直接通过系统调用来编程. POSIX是应用编程接口的一个国际标准,C库提供了P
《Linux内核设计与实现》读书笔记 - 目录 (完结)
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: <Linux内核设计与实现>读书笔记(一)-内核简介 <Linux内核设计与实现>读书笔记(二)- 内核开发的准备 <Linux内核设计与实现>读书笔记(三)- Linux的进程 <Linux内核设计与实现>读书笔记(四)- 进程的调度 <Linux内核设计与实
Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理
Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C
Linux内核设计第二周——操作系统工作原理
Linux内核设计第二周 ——操作系统工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 执行效果 从图中可以看出,每执行my_ start_ kernel函数两次或一次,my_ time_ hander函数执行一次. 图2 mymain.c文件关键代码部分 图3 myinterrupt.c文件关键代码部分 二.分析分析进程的启动和进程的切换机制(分析见注释) 1.myinterrupt.c /* * linux/mykernel/myinterrupt.c * * Kernel i
Linux内核设计第三周——构造一个简单的Linux系统
Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核源代码分析 arch/目录保存支持多种CPU类型的源代码 其中的关键目录包括:Documentation.drivers.firewall.fs(文件系统).include init目录:含有main.c,内核启动相关的代码基本都在init目录下 start_kernal()函数为启动函数,初始化内
Linux内核设计第四周——扒开系统调用三层皮
Linux内核设计第四周 ——扒开系统调用三层皮 一.知识点总结 (一).系统调用基础知识 1.用户态和内核态 内核态:在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 用户态:在相应的低级别执行状态下,代码的掌控范围会受到限制. 区分: CPU每条指令的读取都是通过cs:eip,cs寄存器最低两位表明了当前代码的特权级.内核态下可访问所有地址空间. 0xc0000000(逻辑地址)以上的空间只能在内核态下访问 0x00000000 ~ 0xbfffffff 内核态和用户态均可访问
Linux内核设计第五周——扒开系统调用三层皮(下)
Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加相应的函数 make rootfs 自动编译脚本 2.gdb调试 详细介绍见第三周的学习笔记 3.系统调用在内核代码中的处理过程 (1)系统调用在内核代码中的工作机制和初始化 (2)简化后便于理解的system_call伪代码 system_call完整代码在arch/x86/kernel/entr
Linux内核设计第六周 ——进程的描述和创建
Linux内核设计第六周 ——进程的描述和创建 第一部分 知识点总结 一.进程描述符task_struct数据结构 1.操作系统的三大功能: 进程管理.内存管理.文件系统 2.进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 3.进程控制块PCB——task_struct数据结构 提供了内核需要了解的信息 4.task_struct结构庞大,有400多行代码.包含了进程状态.内核堆栈等相关信息的定义. 可以从下面的图示中,清晰的看出大体的框架. 5.Linux的进程和操作系统原理中描
Linux内核设计第七周 ——可执行程序的装载
Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp XX.c -m32 XX.cpp是预处理文件 编译器生成汇编代码阶段 gcc -x cpp-output -S -o hello.s hello.cpp -m32 XX.s是汇编代码 汇编器生成目标代码阶段 gcc -x assembler -c hello.s -o hello.o -m32 XX
Linux内核设计第八周 ——进程的切换和系统的一般执行过程
Linux内核设计第八周 ——进程的切换和系统的一般执行过程 第一部分 知识点总结 第二部分 实验部分 1.配置实验环境,确保menu内核可以正常启动 2.进入gdb调试,在shedule和context_switch处设置断点 3.开始调试,可以看到Menu内核启动在shedule处中断 4.单步调试,发现程序执行到__schedule处,我们list出该处的代码 5.进入该函数继续调试,在picknexttask处设置断点,查看具体细节 6.查看picknexttask函数的具体代码,我们会
《linux内核设计与实现》读书笔记第三章
第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行线程 用来存放全局变量的数据段 …… 实际上,进程就是正在执行的程序代码的实时结果 2.执行线程 简称线程,是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程,而不是进程. 进程提供两种虚拟机制: 虚拟处理器和虚拟内存. 在线程之间可以共享虚拟
《Linux内核设计与实现》CHAPTER4阅读梳理
<Linux内核设计与实现>CHAPTER4阅读梳理 [学习时间:3hours] [学习内容:多任务:进程调度策略:Linux中进程调度的关键问题:抢占] 个人思考部分见[]标出的部分 一.多任务 1.非抢占式多任务 进程会一直执行直到自己主动停止运行(这一步骤称为让步) 2.抢占式多任务 Linux/Unix使用的是抢占式的方式:强制的挂起进程的动作就叫做抢占.进程在被抢占之前能够运行的时间是预先设置好的(也就是进程的时间片) 二.与策略相关的概念 1.进程的消耗类型 I/O消耗型进程 进程
《Linux内核设计与实现》CHAPTER18阅读梳理
<Linux内核设计与实现>CHAPTER18阅读梳理 [学习时间:2hours] [学习内容:bug的来源分析:bug调试途径] 一.bug来源 1.内核中的bug 内核中的bug表现得不像用户级程序中那么清晰——因为内核.用户以及硬件之间的交互会很微妙: 从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触发的. bug二.调试方法 1.通过打印来调试 优势: 健壮性是printk()函数最容易让人们接受的一个特质(使用环境和时机很广泛): printk
《Linux内核设计与实现》CHAPTER5阅读梳理
<Linux内核设计与实现>CHAPTER5阅读梳理 [学习时间:2.5hours] [学习内容:系统调用的概念.功能及实现:系统调用的创建和使用方法] CHAPTER5 系统调用 1.系统调用的作用 系统调用在用户空间和硬件设备之间提供了一个中间层: 为用户空间提供了一个硬件抽象接口: 系统调用保证了系统的稳定和安全(防止应用程序不正确地使用硬件设备): 实现多任务和虚拟内存 2.系统调用的支持方式 系统调用依靠C库支持.用户程序通过包含标准头文件并和C库链接,就可以使用系统调用. C库也实
热门专题
input只能输入大写字母
el-tree check-change触发两遍
java 读取json文件中的内容
下滑滚动横屏 电脑 前端
this.BeginInvoke耗时过长造成页面假死
docker安装教程
wordbench查看表结构
jvm内存模型及调优
verilog 改变parameter的值就会改变时序裕量
用户点击article_id
sql server 设置全局唯一值
Popconfirm 内容如何换行
asp中引入animate
dmesg命令查看进程被kill
vbox7 安装ubuntu server
python3 z3安装
DisplayName、Description区别
自动化手机和电脑的adb版本不一样
esxi移机恢复虚拟机
command line client tools啥意思