【Linux 内核】教程文章相关的互联网学习教程文章

Linux内核如何装载和启动一个可执行程序【图】

王昭(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核如何装载和启动一个可执行程序ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式,由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。新可执行程序的执行起点...

2017-2018-1 20179202《Linux内核原理与分析》第八周作业【代码】【图】

一 、可执行程序的装载1. 预处理、编译、链接gcc –e –o hello.cpp hello.c //预处理 gcc -x cpp-output -S -o hello.s hello.cpp //编译 gcc -x assembler -c hello.s -o hello.o-m32 //汇编 gcc -o hello hello.o //链接成可执行文件,使用共享库用gcc -o hello.static hello.o -static静态编译出来的hello.static把C库里需要的东西也放到可执行文件里了。用命令ls –l,可以看到hello只有7K,hello.static有大概700K。...

linux 内核开发参考资料

参考链接https://blog.csdn.net/xiezhi123456/category_7609249.htmlhttps://blog.csdn.net/gatieme/category_9265324.html原文:https://www.cnblogs.com/lh03061238/p/12481913.html

《Linux内核分析》第三周学习笔记【代码】【图】

《Linux内核分析》第三周学习笔记 构造一个简单的Linux系统MenuOS郭垚 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、Linux内核源代码简介1.1 Linux内核源代码arch:支持不同的CPU的源代码,其中的关键目录包括:Documentation、drivers、firewall、fs、include等documentation:文档目录fs:文件系统init:内核启动相关的代码main.c、Makefile等基本都在该目录中。(mai...

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码【图】

计算机如何工作三个法宝:存储程序计算机、函数调用堆栈、中断机制。 堆栈函数调用框架传递参数保存返回地址提供局部变量空间 堆栈相关的寄存器Esp 堆栈指针 (stack pointer)Ebp 基址指针 (base pointer) 堆栈操作Push;popEbp用作记录当前函数调用基址- 其他关键寄存器 中断Call指令:1、将eip中下一条指令的地址A保存在栈顶;2、设置eip指向被调用程序代码开始处1、Call xxx2、进入xxxpushl %ebpmovl%esp,%ebp3、退出xxx ...

《Linux内核设计与实现》内存管理札记【图】

1.页 芯作为物理页存储器管理的基本单元,MMU(内存管理单元)中的页表,从虚拟内存的角度来看,页就是最小单位。 内核用struct page结构来标识系统中的每个物理页。它的定义例如以下: flag域用来存放页的状态(是不是脏的。是不是被锁定在内存中等等)。_count表示这一页被引用了多少次。当次数为0时,表示此页没有被引用,于是在新的分配中就能够使用它。virtual域是页的虚拟地址。2.获得页 内核提供了...

Linux内核基础--事件通知链(notifier chain)【转】

转自:http://blog.csdn.net/wuhzossibility/article/details/8079025内核通知链1.1. 概述 Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notificationchain)。 通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。组成内核的核心系统代码均位于...

《linux内核设计与实现》第二章【图】

第二章 从内核出发一、获取内核源码  1、使用Git(linux创造的系统)    使用git来获取最新提交到linux版本树的一个副本:    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git    下载代码后,更新分支到Linux的最新分支:    $ git pull     这两个命令可以获取并随时保持与内核官方的代码树一致。  2、安装内核源代码    压缩形式是bzip2,则运行:    $ tar ...

Linux内核源码情景分析-系统调用

一、系统调用初始化void __init trap_init(void) {......set_system_gate(SYSCALL_VECTOR,&system_call);//0x80...... } 对0x80中断向量。设置了系统调用的总入口system_call。static void __init set_system_gate(unsigned int n, void *addr) {_set_gate(idt_table+n,15,3,addr); } 在IDT中设置了门描写叙述符,例如以下图: Selector为_KERNEL_CS。P为1;DPL为11;DT为0。TYPE为15,陷阱门。Offset就是异常处理函...

20189221 郭开世《Linux内核原理与分析》第二周作业【代码】【图】

读书报告《庖丁解牛Linux内核分析》第 1 章 计算工作原理1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程因为本科时期学过《微机原理与接口技术》课程,学习过8086/8088的汇编语言,所以基本上算是复习。通用寄存器 EAX:累加器,是算术运算的主要寄存器,I/O指令使用该寄存器与外设传送信息 EBX:通用寄存器,常用作基址寄存器 ECX:通用寄存器,在循环时作为隐含的计数器 ED...

Linux 内核网络协议栈 ------ tcp重传数据包 tcp_retransmit_skb 函数

/* This retransmits one SKB. Policy decisions and retransmit queue* state updates are done by the caller. Returns non-zero if an* error occurred which prevented the send.*/ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) {struct tcp_sock *tp = tcp_sk(sk);struct inet_connection_sock *icsk = inet_csk(sk);unsigned int cur_mss = tcp_current_mss(sk, 0);int err;/* Inconslusive MTU probe *...

《Linux内核设计与实现》之中断与中断处理程序【图】

1.中断的概念 中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由OS负责处理这些新到来的信号。 从物理学的角度看,中断是一种电信号,有硬件设备产生,并直接送入中断控制器的输入引脚上。然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。伺候处理器会通知操作系统已经产生中断,这样,操作系...

20169217 《Linux内核原理与分析》 第八周作业【代码】【图】

此次作业仍然分为两个部分,第一部分为实验。 实验要求: 1. 阅读理解task_struct数据结构。 2. 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构。 3.使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证对Linux系统创建一个新进程的理解。 实验内容: 1.理解task_struct数据结构。 操作系统内核里面有操作系统所谓的三大功能,就是进程管理,内存管理和文件...

深入Linux内核架构-进程管理和调度-脑图【图】

第一次做这么复杂的脑图,省略了很多判断语句,并且默认了很多判断为真,只是帮助回忆,具体实现还是要看源码。自己也是刚学,很有可能有很多错误的地方,所以不要轻信图中内容。 :-)下载mmap原文:http://www.cnblogs.com/1oner/p/6659149.html

linux内核的idr学习(一)【图】

今天在看mtd驱动的时候发现idr, 之后网上找了很多资料, 其中我觉得这份参考资料比较好:http://www.2cto.com/kf/201301/186066.html.  idr主要是实现id与数据结构地址的绑定, 一般是结构体的地址. 如果地址比较少的情况下, 可以直接定义一个全局的指针数组, 以数组的下标作为id与地址对应. 但是当地址数量很大的时候, 固定的指针数组无法满足我们的需求, 而且由于用下标作为id的原因使得id无法根据用户的需求改变. 那这个时候一般...