Linux内核
深入探索操作系统
coding丁
中山大学,
math and computer
保持谦卑,保持自信,充满动力,充满野心
展开
-
深入探索网络IO模型
深入探索网络IO模型同步、异步、阻塞、非阻塞同步和异步,是针对调用结果是如何返回给调用者来说的,即调用的结果是调用者主动去获取的(比如一直等待recvfrom或者设置超时等待select),则为同步,而调用结果是被调用者在完成之后通知调用者的,则为异步(比如windows的IOCP)同步通信是指:发送方和接收方通过一定机制,实现收发步调协调。如:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式异步通信是指:发送方的发送不管接收方的接收状态,如:发送方发出数据后,不等接收方发回响应,原创 2020-08-25 10:51:48 · 242 阅读 · 0 评论 -
Linux内存闲谈
Linux内存闲谈内存映射Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的,所以进程可以方便地访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个 CPU 指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。虚拟内存的大小可能远大于物理内存大小,因此,并不是每个虚拟内原创 2020-07-31 11:15:57 · 149 阅读 · 0 评论 -
Linux上的 fork 和 vfork 的区别
Linux 编程的 fork 和 vfork 的区别fork函数:一个进程可以调用fork函数创建一个新进程#include<unistd.h>pid_t fork(); //返回值:子进程返回0,父进程返回子进程ID,若出错返回-1需要注意的是fork函数调用一次返回两次,子进程的返回值是0,父进程的返回值是子进程的PID,因此通常利用这个区别去设置判断语句令父子进程执行不同的操作。现在的操作系统基本都采用了COW机制,因此不再是完全的拷贝父进程的所有内容了。将会对父进程区域进原创 2020-07-08 15:11:52 · 1291 阅读 · 0 评论 -
Socket缓存究竟如何影响TCP的性能?
Socket缓存究竟如何影响TCP的性能?原文链接前言一直以来我们都知道socket的缓存会对tcp性能产生影响,也有无数文章告诉我们应该调大socke缓存。但是究竟调多大?什么时候调?有哪些手段调?具体影响究竟如何?这些问题似乎也没有人真正说明白。下面我们就构建起一个简单的实验环境,在两台虚拟机之间探究一下Socket缓存究竟如何影响TCP的性能?对分析过程不感兴趣的可以直接看最后的结论。影响Socket缓存的参数首先,我们要先来列出Linux中可以影响Socket缓存的调整参数。在proc目录转载 2020-07-07 16:33:14 · 1617 阅读 · 0 评论 -
硬链接和软链接(实践说明)
硬链接和软链接(实践说明)硬链接可以视为给一个文件增加了别名测试:创建一个文件old.file,创建一个硬连接 new.file可以看到两个文件是独立的,且信息一致。用stat查看两个文件的信息:可以看到两个文件信息完全相同,inode是一样的因此,硬连接可以视为一个别名,实际上对inode和data block是完全共享的,因此修改一个文件内容另一个内容也将改变,删除一个文件不影响其他文件。不能对目录建立硬连接,也不可以在不同的文件系统之间建立链接。软连接:创建一个软连接并查看内容原创 2020-07-01 20:29:18 · 516 阅读 · 0 评论 -
Linux进程间通信机制详谈
Linux进程间通信机制Unix系统提供的进程间通信机制主要有:管道和FIFO(命名管道)套接字信号信号量消息队列共享内存区管道pipe管道机制思想是在内存中创建一个共享文件,从而使得通信双方利用该共享文件进行交互。需要注意的是管道数据流动是单向的,是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。管道只在具有公共祖先的两个进程之间使用,可以将管道视为一个独立的文件系统,管道在管道两侧的进程看来就是一个文件,只是这个文件只存在于内存中。一个进程写入管道的所有数原创 2020-06-27 17:54:01 · 1236 阅读 · 0 评论 -
操作系统设计思想--主奴思想
操作系统设计思想–主奴思想对于操作系统而言,如何稳定可靠运行无疑是最重要的。目前的方案均为将用户进程和其他用户进程、将用户进程和操作系统进行分离。实现操作系统可以管理用户进程,但用户进程不能侵入内核,同时用户进程之间也不能互相干预。那么,在同一个cpu同一个指令集以及内存条等的情况下,如何实现该机制?这就是操作系统设计的一个思想,主奴思想,即特权思想。我们希望能够实现,操作系统可以访问以及管理应用程序,但应用程序之间不能够互相干预,同时应用程序的权限是有限的,即不可以干扰操作系统。因此,操作系统需要原创 2020-06-26 17:46:07 · 1453 阅读 · 0 评论 -
Linux内核学习--内存寻址
Linux内核学习–内存寻址内存地址使用 x86 处理器时,需要区分三种地址:逻辑地址(程序看到的地址):逻辑地址由一个段和偏移量组成。线性地址(虚拟地址):位于逻辑地址和物理地址之间物理地址:真实的地址,用于内存芯片级内存单元寻址逻辑地址-->[分段单元]-->线性地址-->[分页单元]-->物理地址分段可以给每一个进程分配不同的线性空间地址,而分页可以把同一线性空间映射到不同的物理空间段寄存器为了快速地找到段选择符,处理器提供了一些段寄存器cs:代码段原创 2020-06-25 21:10:09 · 157 阅读 · 0 评论 -
Linux内核学习---写时复制(COW)技术
Linux内核学习—写时复制(COW)技术写时复制技术(copy-on-write)传统的Unix系统以一种比较统一的方式对待所有的进程:子进程复制父进程所有的资源。这种方法有一些很明显弊端:将使用大量内存复制操作耗费大量时间通常情况下子进程不需要读或者写父进程拥有的所有资源,故该方法效率也是非常低的(复制的大量资源都没有使用)并且,如果应用程序在进程复制后使用exec立即加载新程序,这意味着之前的复制基本是完全多余的,因为进程地址空间需要重新初始化,之前复制的数据不再需要,这导致之前做的都原创 2020-06-02 11:20:25 · 1688 阅读 · 1 评论 -
Linux内核学习---操作系统基础概念
Linux内核学习—操作系统基础概念(本节记录一些操作系统的很基本的知识,比较琐碎,之后将详细对每一模块进行学习)内核内核是硬件和软件之间的一个中间层,主要作用是将应用程序的请求传给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。当操作系统启动时,内核被装入到RAM中,内核中包含的是系统运行所必不可缺的核心过程。资源管理程序内核的两个目标:(软硬件之间的媒介)与硬件交互,为包含在硬件平台上的所有低层可编程部件提供服务为运行在计算机系统上的应用程序提供执行环境内核分为微内核和宏内原创 2020-06-01 11:09:24 · 468 阅读 · 1 评论