linux
一起交流
这个作者很懒,什么都没留下…
展开
-
arm64地址与页表的杂记 一
地址的一些宏定义CPU不可能一直执行位置无关指令,所以必须将 kernel 本身的虚拟地址(运行地址)映射到它实际所在的物理地址,这个通过为 MMU 创建页表来实现,一旦页表创建完成,并打开了MMU,CPU发出的虚拟地址,可以由 MMU 转换成实际的物理地址,这样CPU执行kernel代码将不再受限。KIMAGE_VADDR定义:arch/arm64/include/asm/memory.h#define KIMAGE_VADDR (MODULES_END)default 39 if ARM64原创 2020-11-09 11:17:18 · 1134 阅读 · 0 评论 -
深入理解 Linux 的 RCU 机制
深入理解 Linux 的 RCU 机制转载 https://www.cnblogs.com/qcloud1001/p/7755331.html欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~作者:梁康RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完...转载 2020-02-23 23:02:37 · 255 阅读 · 1 评论 -
Linux中的spinlock机制[三] - qspinlock
原文转载自 https://zhuanlan.zhihu.com/p/100546935Linux中的spinlock机制[三] - qspinlock上文说到,MCS lock可以解决在锁的争用比较激烈的场景下,cache line无谓刷新的问题,但它内含一个指针,所以更消耗存储空间,但这个指针又是不可或缺的,因为正是依靠这个指针,持有spinlock的CPU才能找到等待队列中的下一个节点,...转载 2020-02-05 22:02:26 · 996 阅读 · 0 评论 -
对优化说不 - Linux中的Barrier
原文引用自 [https://zhuanlan.zhihu.com/p/96001570]感谢原作者对优化说不 - Linux中的Barrier我们编写的源代码需要经过编译器转换成机器指令,最后由CPU执行这些指令。编译器作为一个“翻译官”,并不会老老实实地逐条翻译,而是会对我们的代码按照自己的“想法”进行调整和重组。CPU作为一个执行部件,对交给它的指令也不会规规矩矩的逐条执行,而是会重...转载 2020-02-05 21:32:52 · 938 阅读 · 0 评论 -
Linux内核升级
本文作者: Jason hu本文链接: http://jasonhzy.github.io/2019/02/06/ubuntu-kernel-upgrade/版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!Linux内核升级本文作者: Jason hu本文链接: http://jasonhzy.github.io/2019/02...转载 2019-12-22 22:02:26 · 219 阅读 · 0 评论 -
实现64位操作系统的问题解决系列:(三)程序4-11 因为__switch_to符号未定义,编译失败
实现64位操作系统的问题解决系列:(三)程序4-11 因为__switch_to符号未定义,编译失败ub16或者ub18上实践田宇大佬的64位操作系统的设计与实现,因为环境的原因,书中提供的代码并不能完全编译成功,前面我写了实现64位操作系统的问题解决系列:(一)和(二)基本编译到程序4-10都不会出问题,但是到程序4-11就会 因为__switch_to符号未定义,编译失败。问题描述经过实...原创 2019-12-14 20:19:32 · 455 阅读 · 2 评论 -
signal 阻塞与屏蔽
signal,此函数相对简单一些,给定一个信号,给出信号处理函数则可,当然,函数简单,其功能也相对简单许多,简单给出个函数例子如下: 1 #include <signal.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 5 void ouch(int sig) 6 { 7 pr...转载 2019-08-04 19:28:36 · 2419 阅读 · 0 评论 -
linux下把进程/线程绑定到特定cpu核上运行
转载自 https://blog.csdn.net/guotianqing/article/details/80958281 感谢原文作者的分享概述现在大家使用的基本上都是多核cpu,一般是4核的。平时应用程序在运行时都是由操作系统管理的。操作系统对应用进程进行调度,使其在不同的核上轮番运行。对于普通的应用,操作系统的默认调度机制是没有问题的。但是,当某个进程需要较高的运行效率时,就有必要考...转载 2019-08-14 20:20:52 · 760 阅读 · 0 评论 -
Linux shell实现多进程并发执行
二次转载自 https://blog.csdn.net/hellojoy/article/details/77340238在bash中,使用后台任务来实现任务的“多进程化”。在不加控制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有多少任务就有多少“进程”在同时执行。我们就先实现第一种情况:实例一:正常情况脚本———————————————————————————–#!...转载 2019-08-15 11:57:10 · 3668 阅读 · 0 评论 -
驱动参数传递
驱动参数传递直接看代码root@zhangji16vm:/home/zhangji16/c_study/ko_study/prj1# cat hello.c#include <linux/init.h>#include <linux/module.h>#include <linux/moduleparam.h> MODULE_LICENSE("Du...转载 2019-08-30 14:55:30 · 818 阅读 · 0 评论 -
Linux perf 1.1、perf_event内核框架
转载 感谢原文作者 Linux perf 1.1、perf_event内核框架 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-09-07 14:54:34 · 1439 阅读 · 1 评论 -
linux 下设置线程优先级
linux 下设置线程优先级原文链接:http://www.cnblogs.com/xiaotlili/p/3510224.htmlroot@ubuntu:tmp# cat test2.c#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>...转载 2019-09-12 11:44:24 · 6677 阅读 · 0 评论 -
ucontext
转载自 https://blog.csdn.net/qq910894904/article/details/41911175谢谢原文作者1.干货写在前面协程是一种用户态的轻量级线程。本篇主要研究协程的C/C++的实现。首先我们可以看看有哪些语言已经具备协程语义:比较重量级的有C#、erlang、golang*轻量级有python、lua、javascript、ruby还有函数式的sc...转载 2019-08-04 16:54:00 · 1040 阅读 · 0 评论 -
“ucontext” 机制 简介
转载自http://blog.csdn.net/kobejayandy/article/details/41779837 谢谢原文作者原理简介所谓 “ucontext” 机制是 GNU C 库提供的一组用于创建、保存、切换用户态执行“上下文”(context)的API,可以看作是 “setjmp/long_jmp” 的“升级版”,主要包括以下四个函数:void makecontext(uc...转载 2019-08-04 15:54:10 · 1309 阅读 · 0 评论 -
Linux内核漏洞环境搭建方法二
Linux内核漏洞环境搭建方法二检查本地内核版本号假如即将调试的内核版本是 4.14.1,先检查一下本地内核的版本号,如下:zhangji16@zhangji16vm:~/c_study/kernel_prj$ uname -aLinux zhangji16vm 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 x...原创 2019-07-28 22:57:28 · 650 阅读 · 0 评论 -
FAT12文件系统
FAT12文件系统转载自 https://blog.csdn.net/begginghard/article/details/7284834 感谢 一、 FAT12FAT12是DOS时代就开始使用的文件系统(File System),直到现在仍然在软盘上使用,FAT12软盘的被格式化后为:有两个磁头,每个磁头80个柱面(磁道),每个...转载 2019-03-31 13:27:56 · 4568 阅读 · 0 评论 -
全面剖析《自己动手写操作系统》的pmtest1.asm
段机制轻松体验 内存寻址: 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物理地址 为什么要×16?因为在8086CPU中,地址线是20位,但寄存器是16位的,最高寻址64KB,它无法寻址到1M内存。于是,Intel设计了这种寻址方式,先缩小4位成16位放入到段寄存器,用到时候,再将其扩大到...转载 2018-12-10 13:18:34 · 206 阅读 · 1 评论 -
UB18.04 下搭建bochs 环境
UB18.04 下搭建bochs 环境安装流程这是网址https://sourceforge.net/projects/bochs/files/bochs/2.6.9/按下图所示下载解压tar -zxvf bochs-2.6.9.tar.gzcd bochs-2.6.9按照下面的配置进行设置zj@zj-virtual-machine:~/bochs_prj/bochs-2....原创 2019-04-26 21:54:22 · 808 阅读 · 0 评论 -
实现64位操作系统的问题解决系列:(一)ubuntu18.04 下高版本gcc实践操作系统时出现的问题之printk.c: undefined reference to `strlen'
ubuntu18.04 下高版本gcc实践操作系统时出现的问题ub18.04 的gcc 版本本身就高,所以在实践 自制一个64位操作系统 中的实验时,容易出现不少代码在 centos6 能正常编译,到了ub18 上编译不通过,书的作者本人 似乎只是建议读者 采用他自己使用的centos6上实践来避免这个问题,如下截图这个问题在其他地方也有提到,比如:https://stackoverfl...原创 2019-04-28 10:44:36 · 3006 阅读 · 6 评论 -
cmp(compare)指令
cmp(compare)指令转载自 https://blog.csdn.net/feixiang3839/article/details/82666090具体见 图中地址 更可靠cmp(compare)指令进行比较两个操作数的大小例:cmp oprd1,oprd2为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF.我们怎么判断大小...转载 2019-04-19 20:35:05 · 1178 阅读 · 0 评论 -
bochs 调试
未完成,暂时请忽视&lt;bochs:2&gt; b 0x7c00&lt;bochs:3&gt; c(0) Breakpoint 1, 0x00007c00 in ?? ()Next at t=12943099(0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, cx ; 89c8&lt;bochs:4&gt; s...原创 2019-01-08 15:44:39 · 822 阅读 · 0 评论 -
磁道 扇区 图解
在下图中,我们可以看到一圈圈被分成18(假设)等分的同心圆,这些同心圆就是磁道(见图).不过真打开硬盘你可看不到.它实际上是被磁头磁化的同心圆.如图可以说是被放大了的磁盘片.那么扇区就是每一个磁道中被分成若干等分的区域.相邻磁道是有间隔的,这是因为磁化单元太近会产生干扰.一个小软盘有80个磁道,硬盘嘛要远远大于此值,有成千上万的磁道.每个柱面包括512个字节。那么什么是柱面呢?看下图,...转载 2019-01-05 08:56:32 · 7945 阅读 · 0 评论 -
磁盘基本构造
磁盘基本构造linux下使用fdisk指令可以查看硬盘的信息 fdisk -lDisk /dev/hda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes (7M多每个柱面)Device ...转载 2019-01-05 09:14:56 · 1449 阅读 · 1 评论 -
深入理解中断(一)
转载自 http://sec-lbx.tk/2017/02/15/中断相关/#TSS 感谢原文作者深入理解中断(一)什么是中断?中断是能够打断CPU指令序列的事件,它是在CPU内外,由硬件产生的电信号。CPU接收到中断后,就会向OS反映这个信号,从而由OS就会对新到来的数据进行处理。不同的事件,其对应的中断不同,而OS则是通过中断号(也即IRQ线)来找到对应的处理方法。不同体系中,中断可能是...转载 2019-05-06 20:52:21 · 7037 阅读 · 0 评论 -
实现64位操作系统的问题解决系列:(二)undefined reference to xxxx
实现64位操作系统的问题解决系列:(二)undefined reference to xxxx问题出现在实现64位操作系统的问题解决系列:(一)https://blog.csdn.net/m0_37329910/article/details/89633342 中已经出现过连接器找不到所需函数的符号的问题,从而导致链接失败,当时的做法时,把所需要的函数直接在 printk.c中重写,这样的话...原创 2019-05-07 10:11:48 · 3364 阅读 · 0 评论 -
中断处理之 TSS (一)
可能是二次转载 https://www.csdndoc.com/article/2704949中断处理之 TSS (一)指令: call 0x20:00000000 jmp 0x20:00000000selector 0x20 是个 TSS descriptor 的 selector。TSS descriptor 与 segment descriptor 的格式一致,不同的是...转载 2019-05-08 09:14:11 · 1813 阅读 · 0 评论 -
初学驱动之 scull 为何物?
初学驱动之 scull 为何物?首先看scull 设备的结构体的一个定义:struct scull_dev { struct scull_qset *data; /* Pointer to first quantum set. */ int quantum; /* The current quantum size. */ int qset; ...原创 2019-03-23 09:45:22 · 2189 阅读 · 0 评论