操作系统
文章平均质量分 79
小屋子大侠
这个作者很懒,什么都没留下…
展开
-
tcp_transmit_skb的发送时机梳理
在梳理了调用流程上来说,当前会触发调用的场景里面,在tcp_ack或者超时重传的场景下,会继续发送未经ack的数据,在其他的场景下更多的是发送一些窗口探测等相关的协议数据来完成tcp设计的保活,mtu等探测的功能,由于对tcp/ip协议的理解还不够还未能详细的将每个调用函数的场景细节进行学习。原创 2023-02-28 09:57:48 · 330 阅读 · 1 评论 -
Linux网络发送流程概述
本文就是简单的学习了一下有关Linux网络的数据发送的整个流程,其实网上有好多资料描述的都相对比较详细,核心的要点就是网络数据在发送的时候其实要拷贝两次,一次是用户态拷贝到内核态,一次是内核态拷贝到网卡的skb,在用户态调用send的时候其实只是第一次拷贝,拷贝完成之后有可能发送或者等待满足条件再发送,有关发送的时机后续引用博客写的很详细。最后到达了设备层之后再通过软中断的形式将数据发送出去,软中断发送数据后续再可详细学习。原创 2023-01-29 10:39:46 · 761 阅读 · 0 评论 -
Linux内核延迟写机制学习
本文主要是通过资料跟着源码学习了一下数据回写的机制,主要是通过bdi机制,通过workqueue来进行数据的写入,并且在数据写入的时候其实就写到了page层就返回,然后再延迟写入机制将page中的数据落入到底层的存储介质中。触发的时机也引用到下文中的内容,即可以通过系统调用sync主动调用,也可以等待系统配置的定时来执行,在内存分配数据不足的时候也会触发数据回写的流程。由于本人才疏学浅,如有错误请批评指正。原创 2022-12-31 21:26:28 · 2225 阅读 · 0 评论 -
Linux进场调度-中断/系统调用调度与进程的调度类型
本文主要就是了解了一下中断调度和系统调用的场景下的调度时机,有关中断和系统调用的逻辑流程本文没有深入学习(可查阅相关资料),在了解了调度时机之后在了解了有关进程调度的类型,在Linux3.10中有四种调度的类型,本文也并没有深入去分析每个调度类的具体的逻辑详细,只是简单的概述了rt的优先级和cfs公平调度的红黑树的选择下一个进场的内容,后续有机会再深入学习。由于本人才疏学浅,如有错误请批评指正。原创 2022-11-21 18:11:08 · 901 阅读 · 0 评论 -
Linux进程调度-显示调度和时间中断调度标志位设置
本文只是简单的查看了硬件中断的处理与注册流程,大致框架流程就是如上所示。。原创 2022-10-26 12:33:41 · 1037 阅读 · 0 评论 -
Linux中断概述
本文只是简单的查看了硬件中断的处理与注册流程,大致框架流程就是如上所示。。原创 2022-09-25 17:33:50 · 381 阅读 · 0 评论 -
linux网卡驱动注册与接受数据处理
Linux网卡驱动原创 2022-08-28 17:19:16 · 704 阅读 · 0 评论 -
Linux-软中断概述
本文简单的概述了有关Linux软中断的处理的基本流程,软中断包括了网络数据的发送与接受,tasklet机制的执行等几种类型的响应,在执行完成硬件中断之后在执行到irq_exit来检查当时是否有软中断待执行,如果有则直接执行,如果执行的超过限定时候或者次数则调用softirqd的守护进程来进行剩余的软中断的响应处理。由于本人才疏学浅,如有错误请批评指正。httphttpshttpshttpshttps。...原创 2022-07-31 14:12:05 · 1583 阅读 · 0 评论 -
Linux1.2.13文件的读取流程概述
ext2是一个比较经典的文件系统类型,在最新的内核中仍然支持该文件系统。本文就基于ext2来简单的学习一下文件系统的工作流程。从读取的逻辑上看直接就行调用file的文件操作read函数,基于ext2的文件系统,选择的位于fs/ext2/file.c中的ext2_file_read。从流程上来看,在获取完成所有的node信息之后就会调用ll_rw_block来进行数据的读取。从流程上看,在经过参数的检查、设备信息的检查之后会调用make_request来进行数据的读取。主要是在经过检查,获取请求之后将原创 2022-06-27 20:14:45 · 485 阅读 · 0 评论 -
Linux网络设备loopback概述
Linux网络处理流程概述本文主要是学习了解一下整个Linux网络中loopback的原理,代码基于5.17版本。网络子系统初始化在Linux启动的过程中,会初始化网络子系统从而来完成网卡上面的网络包的接受和发送。/* * Initialize the DEV module. At boot time this walks the device list and * unhooks any devices that fail to initialise (normally hardware no原创 2022-05-28 12:56:11 · 1578 阅读 · 0 评论 -
ptrace原理与性能对比
stracestarce在Linux上面是一个比较实用的工具,平常可以跟踪线上进程执行了哪些协同调用的工具,并在debug调试的情况下也能很好的使用,这一切的功能也都是基于Linux提供的强大的ptrace系统调用函数。ptrace原理根据官方介绍: The ptrace() system call provides a means by which one process (the "tracer") may observe and control the execution原创 2022-03-03 16:27:27 · 972 阅读 · 0 评论 -
词法分析浅析
参考资料《自制编程语言基于C语言》《自己动手写编译器、连接器》《自己动手构造编译系统编译、汇编与链接》《编译原理 第二版》词法分析词法分析主要就是将源码分解成每一个定义的token,通过词法解析分析出哪些是关键字,哪些是标识符,哪些是字符串等等,词法分析是编译的第一阶段,通过生成token来为接下来的语法分析做铺垫。在实际的分析过程中,词法分析其实也还包含了其他的一些如符号表相关的维护,但是由于当前只是熟悉一下词法分析的概念所以就只是实现了一个token的生成过程。获取字符if字符串else原创 2020-05-12 18:15:24 · 781 阅读 · 0 评论 -
垃圾回收算法-标记清扫回收
参考书籍1.垃圾回收算法手册 自动内存管理的艺术2.垃圾回收的算法与实现标记清扫回收垃圾回收算法一般都是现在的自动内存管理系统中都会使用到的,例如python、go等语言都实现了自己的垃圾回收机制,从而解放了用户手动来管理内存的问题。一个自动内存管理系统一般都分为主要的三个操作:1.为新对象分配空间,2.确实已分配空间的对象是否存活,3.回收死亡对象占用的内存空间。通过这三种方式,来在...原创 2020-04-23 11:51:53 · 346 阅读 · 0 评论 -
Linux内核网络栈1.2.13-route.c概述
参考资料<<linux内核网络栈源代码情景分析>>route路由表概述在IP协议的实现中,只要发送数据包都要查询路由表,选择合适的路由选项,确定下一站的地址,并构造MAC地址,进而将数据包发往链路层进行处理,本文就继续学习route相关内容route概述route数据结构路由表项的数据结构如下;/* This is an entry in the IP ro...原创 2019-08-28 15:33:08 · 867 阅读 · 0 评论 -
Linux内核网络栈1.2.13-icmp.c概述
参考资料<<linux内核网络栈源代码情景分析>>icmp协议在实现的过程中, ICMP协议工作再IP协议之上,但又不与TCP协议工作再一级,而是在下一级,在一般ICMP模块处理完后,还需要进一步调用TCP协议进行处理。该协议的目的主要是用于通报错误或者探测远端主机信息。ICMP的主要流程icmp_send函数该函数主要是发送一个ICMP错误通报数据包/*...原创 2019-08-27 19:30:24 · 492 阅读 · 0 评论 -
Linux内核网络栈1.2.13-tcp.c概述
参考资料<<linux内核网络栈源代码情景分析>>af_inet.c文件中调用函数在协议层的实现本文主要根据在af_inet.c文件中根据初始化不同的协议,来调用不同的协议族处理。在af_inet.c中的inet_create函数中就是根据传入不同的连接类型展示不同的协议族。static int inet_create(struct socket *sock, i...原创 2019-08-26 16:10:24 · 415 阅读 · 0 评论 -
Linux内核网络栈1.2.13-af_inet.c概述
参考资料<<linux内核网络栈源代码情景分析>>socket常用函数继续调用分析根据socket提供的常用库函数,socket、read和write等函数,继续往下一层分析tcp/ip协议的执行过程,本文分析的函数大部分位于af_inet.c文件中,该层大部分逻辑还是将调用tcp.c中的逻辑处理,作为了一个过渡层,待到tcp.c文件内容时,得到的细节会慢慢深入。...原创 2019-08-08 15:47:39 · 567 阅读 · 0 评论 -
Linux内核网络栈1.2.13-socket.c函数概述
参考资料<<linux内核网络栈源代码情景分析>>socket常用函数概述根据socket提供的常用的库函数,socket,read,write等函数,执行的过程inet协议的注册流程在上文中分析过了在设备的初始化过程中,会调用sock_init函数初始化,在该函数中又会调用proto_init函数进行初始化,在proto_init函数中会调用inet对应的初...原创 2019-07-26 15:35:28 · 388 阅读 · 0 评论 -
操作系统学习:启动进入实模式
本文参考书籍操作系统真相还原Linux内核完全剖析:基于0.12内核x86汇编语言 从实模式到保护模式ps:基于x86硬件的pc系统实模式相关介绍实模式在上文已经做了简要的介绍,实模式的寄存器都是16位,实模式的1MB的寻址能力是通过段基址左移四位加上段内偏移实现的,由于BIOS启动的过程中就会被cpu执行,所以当bios加载完成时,1MB的内存布局如下图所示(图片来源操作系...原创 2018-05-19 15:56:17 · 1688 阅读 · 0 评论 -
操作系统学习:实模式进入保护模式
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式ps:基于x86硬件的pc系统保护模式相关介绍从实模式进入保护模式其实经历三个步骤就可以了,第一步,加载gdt,第二步,打开A20,第三步,置cro为1.gdt介绍首先简单介绍一下保护模式下的分段机制 由于在保护模式下,访问地址也是通过段基址加段内偏...原创 2018-05-20 15:47:20 · 2012 阅读 · 0 评论 -
操作系统学习:内存分页与中断
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式ps:基于x86硬件的pc系统内存分页机制内存信息的获取在进行内存分页之前,需要先知道机器的物理内存有多少。当前Linux获取机器内存的方法是,在进入保护模式之前,通过bios中断来获取机器的物理内存大小,通过调用bios中断0x15来实现,通过该中断...原创 2018-05-26 09:55:15 · 1313 阅读 · 0 评论 -
操作系统学习:系统调用与Linux0.12初始化详细流程
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统系统调用系统调用(通常称为syscalls)接口是Linux内核与上层应用程序进行交互通信的唯一接口,如图所示; 用户程序通过直接或间接(通过库函数)调用中断int 0x80,并在eax寄存器中指定...原创 2018-06-11 18:48:05 · 611 阅读 · 0 评论 -
操作系统学习:Linux0.12初始化详细流程-首个子进程
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12初始化续在上一篇博文中根据main函数的执行;void main(void) /* This really IS void, no error here. */{ ...原创 2018-06-12 19:04:52 · 761 阅读 · 0 评论 -
操作系统学习:Linux0.12初始化详细流程-进程1调度与读取硬盘数据
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12初始化续-时间中断和任务切换此时操作系统以及开启了时间中断,在进程0在fork出进程1的过程也有可能发生时间中断并发生任务调度,此时,先分析一下时间中断的处理过程和任务调度。...原创 2018-06-14 16:27:23 · 747 阅读 · 0 评论 -
操作系统学习:Linux0.12文件异步IO
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12异步IOLinux在需要同时使用多个文件描述符来访问数据会间歇传输的IO设备,如网络设备等,如果使用多个read(),wirte()调用来处理,当其中一个调用堵塞时,会引发整个阻塞,...原创 2018-06-23 23:17:02 · 411 阅读 · 0 评论 -
操作系统学习:Linux0.12初始化详细流程-进程1加载虚拟盘和根文件系统安装
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12初始化续在上文中主要分析了读取硬盘数据到内存中,通过将硬盘中的数据读入到内存中缓存后,然后如果其他进程需要读取同样的数据时,根据内存是否有更新,来获取内存数据,或者将内存块数据同步到...原创 2018-06-16 15:11:01 · 376 阅读 · 0 评论 -
操作系统学习:Linux0.12初始化详细流程-打开文件与加载可执行程序
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12初始化续本次主要分析文件的打开与可执行程序的加载。打开文件与中断的执行过程上文分析完成了setup函数的执行,此时返回init函数继续执行,此时会执行到; (voi...原创 2018-06-17 12:17:54 · 684 阅读 · 0 评论 -
操作系统学习:Linux0.12初始化详细流程-进程退出与系统进入怠速
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式4.Linux内核设计的艺术ps:基于x86硬件的pc系统Linux0.12初始化续此时系统已经加载了/etc/rc中的命令进行了执行,我们继续往下分析。进程退出 execve("/bin/sh",argv_rc,envp_rc);...原创 2018-06-18 10:11:57 · 442 阅读 · 0 评论 -
操作系统学习:进程、线程与Linux0.12初始化过程概述
本文参考书籍1.操作系统真相还原2.Linux内核完全剖析:基于0.12内核3.x86汇编语言 从实模式到保护模式ps:基于x86硬件的pc系统进程进程是一种控制流集合,集合中至少包含一条执行流,执行流之间就是相互独立的,但它们共享进程的所有资源,它们是处理器的执行单位,或者称为调度单位,它们就是线程。 每个进程都运行在自己的地址空间中,有内存空间才能存储资源,因此进程...原创 2018-06-10 19:14:08 · 1035 阅读 · 0 评论 -
Linux内核网络栈1.2.13-有关tcp/ip协议的基础入门
参考资料<<linux内核网络栈源代码情景分析>>Linux内核网络栈的基础内容主要分析tcp/ip相关的基本构成,概述了socket的系统调用进入内核的一个流程,并了解了协议的执行流程。为后续的理解学习做铺垫。应用程序调用进入内核的过程Tcp/ip协议示意图如下;在Linux操作系统上面,从用户态进入内核态的方式就是通过系统调用INT $0x80进入内核执...原创 2019-07-24 14:24:56 · 235 阅读 · 0 评论 -
Linux内核网络栈1.2.13-网卡设备的初始化流程
参考资料<<linux内核网络栈源代码情景分析>>网卡设备的初始化本文主要描述一下网卡设备的整个初始化的过程,该过程主要就是根据设备的硬件信息来获取与传输网络数据,注册相关的网卡中断处理函数,协议的初始化等内容。初始化过程首先在操作系统初始化的过程中,在main函数中的sock_init函数;void proto_init(void){ extern st...原创 2019-07-25 11:17:01 · 1159 阅读 · 0 评论 -
操作系统学习:基础轮廓梳理
本文参考书籍基于x86硬件的pc系统操作系统真相还原Linux内核完全剖析:基于0.12内核x86汇编语言 从实模式到保护模式计算机概述计算机的硬件组成基本分为控制器、运算器、存储器和输入输出设备。 计算机系统除了基本硬件外,还包含了计算机软件,计算机软件主要分为系统软件如操作系统和应用软件如在特定操作系统上的应用程序,整体结构大致如下; | 应用软件如QQ ...原创 2018-05-18 08:15:16 · 455 阅读 · 0 评论