【《Linux内核分析》实验一】教程文章相关的互联网学习教程文章

Linux内核将支持Zstd压缩算法【图】

Facebook 工程师 Nick Terrell 近日向 Linux 内核提交了使用 Zstd 压缩 Linux 内核镜像的补丁,这些补丁显示了使用 Zstd 对内核、ramdisk 和 initramfs 进行压缩操作具备巨大潜力。Nick 发现,在 x86_64 硬件上,当初始 RAM 文件系统将压缩算法从 XZ 切换到 Zstd 时,解压时间从 12 秒下降到只需 3 秒,此次切换整体上还给系统的引导时间带来了两秒的改进。同样看到较大改进的场景包括从 LZMA 切换到 Zstd,Nick 在切换至 Zstd 的 ...

Linux内核堆栈调用实现分析

1 内核线程内核为每个线程分配8K的栈空间, 在每个堆栈的顶部放着struct thread_info 结构体,用来保存线程相关信息.其中有几个重要变量:Preempt_count :此变量分为四部分 0-7bit :当前进程是否能抢占的标志8-15bit:softirq 使能标志16-23bit :hardirq 使能标志24bit:PREEMPT_ACTIVE标志位(原子上下文标志位??)Task: 进程相关的结构,包含更加丰富的信息Cpu_context :cpu 寄存器值,这个应该是当前进程被切换时,保留下来的线程...

Linux内核设计与实现——内核同步【图】

内核同步同步介绍同步的概念临界区:也称为临界段,就是访问和操作共享数据的代码段。竞争条件: 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。但又会产生一些关于锁的问题。死锁产生的条件:要有一...

[Linux]查看Linux内核及发行版本【代码】

# uname -a Linux 2fc7cabbc5e8 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 GNU/Linux # cat /proc/version Linux version 3.10.0-1062.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Wed Aug 7 18:08:02 UTC 2019 # cat /etc/issue Debian GNU/Linux 10 \n \l 或 # cat /etc/redhat-release CentOS Linux release 7.7...

linux 内核 printk 使用【代码】

在linux 中,内核打印语句 printk() 会将内核信息输出到内核信息缓冲区中。内核信息缓冲区是一个环形缓冲区(ring buffer),因此,如果插入的信息过多,就会将之前的信息冲刷掉。 printk() 定义了8个消息级别,分为级别0 ~ 7,级别越低(数值越大)的消息越不重要,第0级是紧急事件,第7级是调试级,在内核中 include/linux/printk.h 中的定义如下:#define KERN_EMERG "<0>" /* system is unusable */ #define ...

Linux内核分析(第七周)

可执行程序的装载 一、预处理、编译、链接和目标文件的格式1.可执行程序怎么来的?  预处理:      gcc -E -o hello.cpp hello.c -m32      *负责把include的文件包含进来及宏替换  编译:      gcc -x cpp-output -S -o hello.s hello.cpp -m32      gcc -x assembler -c hello.s 0o hello.o -m32      hello.s 汇编代码      hello.o 二进制文件  链接:      gcc -o hello hel...

Linux内核学习第五周 系统调用【图】

一、实验截图二、系统调用流程图: 三、总结:系统调用过程分析 linux的系统调用过程:用户程序→C库(即API):INT 0x80 →system_call→系统调用服务例程→内核程序。我们常说的用户API其实就是系统提供的C库。 系统调用是通过软中断指令 INT 0x80 实现的,而这条INT 0x80指令就被封装在C库的函数中。软中断和我们常说的硬中断不同之处在于,软中断是由指令触发的,而不是由硬件外设引起的。INT 0x80 这条指令的执行会让...

Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构 struct timeval { time_t tv_sec; /***second***/ susecond_t tv_usec;/***microsecond***/ } 到底microsecond是毫秒还是微秒??1秒=1000毫秒(3个零),1秒=1000 000微秒(6个零),1秒=1000 000 000纳秒(9个零),1秒=1000 000 000 000皮秒(12个零)。 秒用s表现,毫秒用ms,微秒用us表示,纳秒...

2018-2019-1 20189219《Linux内核原理与分析》第五周作业【代码】【图】

以前学习计算机操作系统的时候也学习过系统调用的三层机制,但是当时都是纯理论学习,没有亲身实践,很多都理解的比较模糊,这里借助老师的方法使用内嵌汇编加深理解。系统调用要想理解系统调用的具体含义,我们需要先了解用户态、内核态和中断三个概念。简单的来说:在用户态下,我们可以运行用户态进程,而在内核态下,我们不仅仅可以运行用户态下的进程,还可以运行更高级别的内核态进程。如果在用户态下我们需要使用内核态下的...

Linux内核优化

参考文档:https://www.linuxprobe.com/security-optimization.html/etc/sysctl.conf这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件。可以用于修改该文件的内容进行对系统的一些的修改优化,修改完毕后使用 sysctl -p 进行生效##系统级文件句柄优化fs.file-max=65535##tcp连接优化net.ipv4.neigh.default.gc_stale_time=120net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filt...

linux内核之accept实现【代码】

用户态对accept的标准用法: if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) { //accept()函数让服务器接收客户的连接请求 perror("accept Error\n"); continue; } sockfd是通过socket系统调用,并且经过listen过的套接字: sockfd = socket(AF_INET, SOCK_STREAM, 0) listen(sockfd, 128) remote_addr将会存储远端设备的地址信息。 SYSCALL_DEFINE3(accept,int,...

Linux内核编程-0:来自内核的 HelloWorld【代码】

Linux内核编程一直是我很想掌握的一个技能。如果问我为什么,我也说不上来。 也许是希望有一天自己的ID也出现在内核开发组的邮件列表里?或是内核发行文件的CREDITS文件上? 也许是吧。其实更多的,可能是对于底层的崇拜,以及对于内核的求索精神。 想到操作系统的繁杂,想到软件系统之间的衔接,内心觉得精妙的同时,更是深深的迷恋。 所以从这篇文章开始,我要真正的走进Linux内核里了,让代码指引我,去奇妙的世界一探究竟。在这...

Linux内核学习笔记(4)-- wait、waitpid、wait3 和 wait4【代码】【图】

进程调用 exit() 退出执行后,被设置为僵死状态,这时父进程可以通过 wait4() 系统调用查询子进程是否终结,之后再进行最后的操作,彻底删除进程所占用的内存资源。 wait4() 系统调用由 linux 内核实现,linux 系统通常提供了 wait()、waitpid()、wait3()、wait4() 这四个函数,四个函数的参数不同,语义也有细微的差别,但是都返回关于终止进程的状态信息。1、wait() 函数:  wait() 函数的原型是:#include <sys/types.h> ...

ubuntu14使用qemu调试linux内核【代码】

# 下载内核源代码编译内核cd ~/LinuxKernel/wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xzxz -d linux-3.18.6.tar.xztar -xvf linux-3.18.6.tarcd linux-3.18.6make i386_defconfigmake # 一般要编译很长时间,少则20分钟多则数小时# 制作根文件系统cd ~/LinuxKernel/mkdir rootfsgit clone # 如果被墙,可以使用附件menu.zip cd menugcc -o init linktable.c menu.c test.c -m32 -static –lpthreadc...

linux内核修炼之道

华清远见·任桥伟 人民邮电 2010内核不学,岂能理解?今天开始正式学习内核原理原文:http://www.cnblogs.com/iamgoodman/p/3560988.html