
基础篇-操作系统
小豆角
一个喜欢刨根问底的程序媛
展开
-
使用tcp协议手写一个http的server端和一个http的客户端
浏览器就是一个http协议的客户端,浏览器不仅仅是http协议的客户端,还是ftp等其他服务的客户端,目前只尝试http协议。1 .手动实现一个http的server端,请使用浏览器作为客户端访问这个http服务的server端:本质就是把返回流设置成http resp的格式。package mainimport ( "net" "fmt")func main() { listener, err := net.Listen("tcp", "127.0.0.1:8000") i原创 2020-08-03 16:39:14 · 667 阅读 · 0 评论 -
zz内核初始化
https://www.cnblogs.com/JaPer/p/10781136.html内核启动的入口函数 start_kernel() {init/main.c配置文件} , 里面有XXXX_init的初始化函数1)在操作系统中有个创始进程,set_task_stack_end_magic(&init_task)。 有一个参数 init_task 定义是struct task_struct init_task = INIT_TASK(init_task)...原创 2020-06-10 21:36:02 · 285 阅读 · 0 评论 -
一个连接的建立和数据的收发:干活的都是协议栈,驱动程序,网卡
服务端等待连接模块1.服务端进程创建套接字-创建套接字阶段描述符=socket(使用ipv4,使用tcp,...)//此过程,开辟了一个内存空间,返回的是这块空间的文件描述符,既分配用于套接字的内存空间2.将套接字设置为等待连接状态-等待连接状态bind(描述符1,端口号等,...) //把端口号写入套接字中,因为客户端在发起连接的时候,需要指定服务端的端口号listen(描述符1,...) //向套接字写入等待连接状态这一控制信息向套接字写入bind所指定的端口号,并等待...原创 2020-05-17 19:53:49 · 332 阅读 · 0 评论 -
工作中一个小问题,有关iscsi的
售前在跟客户演示块存储的使用,遇到一个需求,多个客户端挂载同一块虚拟盘,可否实现同步读写,一路问到我这里,虽然不是我一个小小的控制台开发力所能及的,但是多探索不是坏事,还是磕一下吧。我简单测试了下,通过客户端1挂载并使用了虚拟盘,写文件,然后通过客户端2挂载虚拟盘,可以看到客户端1写的东西。然后我又在客户端2写东西,客户端1没有得到同步,说明数据实时同步是不支持的,我把客户端2虚拟盘卸载掉,然后重新挂载,展示的还是客户端1的那些内容,说明客户端2的数据并没有真正持久化。怀疑一是iscsc协议的问题,原创 2020-05-09 16:46:02 · 1218 阅读 · 0 评论 -
大爱一本书-linux内核源码分析上下册
在我抽屉里躺半年多了,此前看过电子的,喜欢的不行,买了纸质的在桌子里睡觉。昨天想看一下select()的实现,搜索到了设备驱动那一章节。非常透彻的讲解。基于linux2.4内核源码说的。计算机最基本的三个物质基础就是cpu 内存 以及IO设备(eg:网卡/硬盘),严格地说,离开了对设备的操作即IO操作,计算机本身也就失去了意义。文件操作是对设备操作的组织与抽象,而设备操作则是文件操...原创 2020-05-07 13:25:18 · 431 阅读 · 0 评论 -
select poll epoll IO多路复用模型
扎心了,不表。还是捋一下,很基础1.select poll epoll原创 2020-04-30 14:53:31 · 139 阅读 · 0 评论 -
linux的/proc /sys目录的区别
内核中有三个常用的伪文件系统:procfs,debugfs和sysfs。 procfs — The proc filesystem is a pseudo-filesystem which provides an interface to kernel data structures.//提供内核数据结构的接口,是一个为文件系统.挂载在/proc目录 sysfs — The f...原创 2020-04-28 11:18:51 · 1946 阅读 · 0 评论 -
如何在linux内核增加一个自定义的系统调用
1.在/usr/src/Linux-2.4.18/kernel/sys.c添加自己的源代码2.连接新的系统调用,让linux内核知道他的存在,修改两个文件文件1:系统调用清单表/usr/src/Linux-2.4.18/include/asm-i386/unistd.h,给你的系统调用函数分配一个num文件2:系统调用跳转表,这是对sys_call_table[]数组进行初始化,该数组...原创 2020-04-27 17:12:18 · 866 阅读 · 0 评论 -
unix域套接字
Unix域套接字只能用于在同一个计算机的进程间进行通信。虽然网络套接字也可以用于单机进程间的通信,但是使用Unix域套接字效率会更高,因为Unix域套接字仅仅进行数据复制,不会执行在网络协议栈中需要处理的添加、删除报文头、计算校验和、计算报文顺序等复杂操作,因而在单机的进程间通信中,更加推荐使用Unix域套接字。------https://www.jianshu.com/p/43ed6e40...原创 2020-04-27 16:21:09 · 573 阅读 · 0 评论 -
nf_conntrack连接跟踪模块
https://blog.youkuaiyun.com/u010472499/article/details/78292811最近在看集群搭建时候内存优化的配置,对一条记录不解,故而查阅。/lib/modules/`uname -r`/kernel/net/netfilter/nf_conntrack.konf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个...原创 2020-03-25 11:38:44 · 461 阅读 · 0 评论 -
杂感源自知乎-计算机原理篇-1
在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远。函数调用的机制:函数处理是通过把程序计数器的值设定成函数的存储地址实现的,函数执行跳转指令后,必须滨兴返回处理,单纯的指令跳转没有意义。“程序不都如内存就无法运行”:计算机最主要的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容...原创 2020-03-16 12:43:44 · 247 阅读 · 0 评论 -
读书笔记-许式伟架构课-如何阅读源代码
读源代码的目的就是了解架构。我认为首先要找出来软件实体,然后理一下软件实体之间的关系。看源代码,我们首先要做到的是理解系统的概要设计。概要设计的关注点是各个软件实体的业务范畴,以及它们之间的关系。有了这些,我们就能够理解这个系统的架构设计的核心脉络。要理一下各个软件实体的业务范畴,以及它们之间的关系。有了这些,我们就能够理解这个系统的架构设计的核心脉络。有文档就先看文档,哪怕文档偏陈旧...原创 2020-03-11 11:16:41 · 367 阅读 · 0 评论 -
学习笔记-bilibili计算机速成课
文件格式:如何编码文字,声音,图片。我认为文件格式,就是二进制串的编码格式。无论是文本文件,声音文件eg.mp3格式,还是图形文件如.jpg格式,或者其他文件格式,底层都是长串二进制。储存器没有文件的概念,只是存储大量位,需要有个图书文件,记录其他文件位置,比如目录文件,目录文件会记录每个文件的名称,元信息,以及文件的其实和结束位置,这种存储文件的方式叫平面文件系统,文件都在同一个层次。...原创 2020-03-10 16:13:25 · 414 阅读 · 0 评论 -
读书笔记-许式伟架构课-4
外置存储是持久存储,它的目的是用来存储资料的。而内存是临时存储,虽然是存储,但是它实质上是为 CPU 的计算服务的。怎么让很多的软件进程同时使用这些外置存储设备,而不会乱呢?直接基于物理的存储地址进行读写肯定是行不通的,过上几个月你自己可能都不记得什么数据写到哪里了。所以和内存管理不同,外部存储的管理,我们希望这些写到存储中的数据是“自描述”的某种数据格式,我们可以随时查看之前写了哪些内容...原创 2020-03-09 15:57:57 · 207 阅读 · 0 评论 -
读书笔记-许式伟架构课-2
操作系统首先要解决的是软件治理的问题,大体可分为以下六个子系统:进程管理、存储管理、输入设备管理、输出设备管理、网络管理、安全管理等。操作系统其次解决的是基础编程接口问题。这些编程接口一方面简化了软件开发,另一方面提供了多软件共同运行的环境,实现了软件治理。商业价值来说,操作系统是基础的刚需软件。计算机离开了操作系统就是一堆废铜烂铁。随着个人计算机采购需求的急速增加,光靠软件 Licens...原创 2020-03-09 15:20:38 · 360 阅读 · 0 评论 -
Linux如何搭建Samba文件共享服务
https://baijiahao.baidu.com/s?id=1619078525576466832&wfr=spider&for=pcLinux如何搭建Samba文件共享服务最近由于学习方面的原因,时间比较紧,只能用零碎时间来整理文档,所以发文章的频率可能会没那么快了,希望亲爱的你们多多体谅。然后,因为发文慢了,我有个想法就是把我上课的笔记分享给你们看,但我不知...原创 2020-03-06 15:37:48 · 1554 阅读 · 0 评论 -
读书笔记-许式伟架构课读后感-1
1.程序员是一个门槛极低的职业2.cpu指令分为三类并且是及其有限的:计算类,也就是支持我们大家都熟知的各类数学运算,如加减乘除、sin/cos 等等。I/O 类,(从存储读写数据)从输入输出设备读数据、写数据。指令跳转类,在满足特定条件下跳转到新的当前程序执行位置。之所以这个有限的指令集能够组合无限多的软件,是因为,指令序列是无穷的,并且指令操作的数据也是各种不同,这就意味着...原创 2020-03-04 21:49:30 · 473 阅读 · 0 评论 -
使用 /sys 文件系统访问 Linux 内核
https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径sysfs 的历史,其与 proc 的关系?sysfs 本身并不是一项很新的技术,但笔者发现,虽然 sysfs 从2003年诞生至今已有5年,但人们对 sysfs 依然缺乏了解;一个很重要的原因可...原创 2020-03-04 16:12:53 · 542 阅读 · 0 评论 -
从文件系统到磁盘
https://www.cnblogs.com/kexinxin/p/9939090.html"I/O控制为最底层,由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息传输。设备驱动程序可以作为翻译器。其输入由高层命令组成,如"retrieve block 123"。其输出由底层的、硬件特定的命令组成,这些命令用于控制硬件控制器,通过硬件控制器可以使I/O设备与系统其它部分相连。...原创 2020-03-04 16:00:22 · 269 阅读 · 0 评论 -
Linux文件系统详解
http://c.biancheng.net/view/880.html硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁...原创 2020-03-04 14:57:22 · 156 阅读 · 1 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
ZZ:https://www.ibm.com/developerworks/cn/linux/l-proc.html这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。/proc 文件系统包含了一些目录(用作组织信息的方式)...原创 2020-03-04 14:21:34 · 420 阅读 · 1 评论 -
读书:05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
作为应用陈谷的开发者。通过操作系统以文件的方式对硬盘读写,os的文件系统把硬盘以块划分,每个文件占据若干个块,然后通过一个文件控制块即FCB记录每个文件占据的硬盘数据块。这个FCB在os中是inode,访问文件必须获得文件的inode,在inode中查找文件数据块索引表,根据索引中记录的硬盘地址访问硬盘,inode中记录着文件的权限所有者修改时间。文件大小,等文件属性信息,以及文件数据块硬盘地...原创 2020-02-28 17:37:17 · 478 阅读 · 0 评论 -
读书笔记-许式伟的架构课-我的想到
1.疑问里有一个人问,既然cpu只和内存打交道,那磁盘io是如何进行的,大概是这个疑问吧,我一时语塞,想了一下,回复到外设都会以端口映射或者内存映射的方式,在内存中有个记录,所以cpu虽然是与内存打交道,但是通过内存也可以操作外设,因为外设被映射到内存。现在我补充下,地址是内存的概念,cpu只管告诉内存,地址和操作+数据,所以cpu看来是往一个地址输送指令或数据。而内存的作用只是用作存储,存储...原创 2020-01-03 10:20:29 · 351 阅读 · 0 评论 -
cpu指令如何读写硬盘
https://blog.youkuaiyun.com/farmwang/article/details/49999879在《cpu解读一》中,我们提到cpu的主要作用之一就是控制设备之间的数据交互。这其中自然也包括了硬盘。系统的所有数据基本都在硬盘中,所以知道怎么读写硬盘,对程序来说非常重要,所以我们先来探索下传说中的pio模式。cpu要想直接访问设备里的数据,必须对设备存储空间进行编址。而硬...原创 2020-01-02 12:02:48 · 1957 阅读 · 0 评论 -
zz :inode、block和磁盘性能的关系
https://cloud.tencent.com/developer/article/1409862inode、block和磁盘性能的关系什么是inode和block?理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(即:Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低...原创 2019-08-17 20:30:29 · 258 阅读 · 0 评论 -
图解linux中Inode-分析Linux如何通过Inode读取磁盘
https://blog.youkuaiyun.com/hello_hwc/article/details/404747631、什么是inode?首先要明白,linux中所有的东西都是文件,不管是目录还是命令操作系统读硬盘的时候,为了提高效率,一次性读取一个block(常见大小4KB),一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位而Inode就是帮助linux系...原创 2019-08-17 20:28:38 · 827 阅读 · 0 评论 -
理解Inode
https://cloud.tencent.com/developer/article/1114364inode是什么理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(bl...原创 2019-08-17 20:24:25 · 378 阅读 · 0 评论 -
电脑中常用的“扇区”、“簇”、“块”、“页”等概念
1、什么是扇区和(磁盘)块?物理层面:一个磁盘按层次分为磁盘组合 -> 单个磁盘 -> 某一盘面 -> 某一磁道 -> 某一扇区扇区,顾名思义,每个磁盘有多条同心圆似的磁道,磁道被分割成多个部分。每部分的弧长加上到圆心的两个半径,恰好形成一个扇形,所以叫做扇区。扇区是磁盘中最小的物理存储单位。通常情况下每个扇区的大小是512字节。(由于不断提高磁盘的大小,部分厂商...原创 2019-08-14 22:22:46 · 1750 阅读 · 0 评论 -
簇和扇区-簇>扇区
簇和扇区不是属于一个范畴。簇是系统在硬盘上读写文件时的单位,是一个数据块。而扇区是硬盘划分的最小单位值,就是簇(数据块)占用的地方。簇的大小大于扇区的大小。硬盘每簇的扇区数与硬盘的总容量大小有关。扇区是存储介质上可由硬件寻址的基本单位,x86系统几乎总是定义512字节的扇区大小;簇是许多文件系统格式使用的可寻址数据块,簇的大小总是扇区大小的整数倍,且不同文件系统对于不同大小的卷(分区)会有不同的...原创 2019-08-14 22:18:22 · 5228 阅读 · 0 评论 -
unix domain sockets vs. internet sockets
addr:https://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.htmlOn Fri, 25 Feb 2005, Baris Simsek wrote:> I am coding a daemon program. I am not sure about which type of s...原创 2019-08-08 10:06:56 · 140 阅读 · 0 评论 -
inode-来自阮一峰大神的深刻理解
一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 s...原创 2019-06-23 21:35:56 · 205 阅读 · 0 评论 -
端口号,一个端口号是否可以被多个进程使用?
1.端口号的作用端口号可以用来标识同一个主机上通信的不同应用程序,端口号+IP地址就可以组成一个套接字,用来标识一个进程2.端口号的应用场景在TCP/IP协议中,用“源IP地址”,“目的IP地址”,“源端口号”,“目的端口号”,协议号(IP协议的协议号为4,TCP的协议号为6)这样的一个五元组来标识一个通信,通信的双方在发送消息时,消息的头部会带着这样的五元组3.端口范围划分(1)0...转载 2019-06-10 12:24:53 · 14029 阅读 · 4 评论 -
os之文件网络传输流程
零拷贝:os.filecopy文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操作和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分...原创 2019-06-08 19:37:40 · 239 阅读 · 0 评论 -
Go语言汇编优化-蒙卓:汇编直接操作内存-减少读写,并行操作,硬件加速
讲汇编优化,不得不说一句高德纳的名言——过早的优化就是万恶之源。如果你们没有被逼到绝路,或者要榨干CPU的性能,千万不要尝试以下演讲的内容。我给 Go 的 1.11 提交了这几个项目,第一个是 Hashmap 优化,就是你们常用的 map 操作里面最费时的哈希值计算优化。VDSO,虚拟动态对接的 syscall,主要是优化系统时间调用。Md5、Chacha20就不说了。还有一个...转载 2019-06-03 13:59:15 · 742 阅读 · 0 评论 -
linux 5中io模型
https://blog.youkuaiyun.com/qq_38847853/article/details/807897471.5种io模型阻塞IO(bloking IO)非阻塞IO(non-blocking IO)多路复用IO(multiplexing IO)信号驱动式IO(signal-driven IO)异步IO(asynchronous IO)一个输入操作通常包括两个阶段:...转载 2019-05-27 17:45:57 · 138 阅读 · 0 评论 -
操作系统实用教程-IO系统
IO系统调用,可以阻塞+多线程,非阻塞+多线程,这两种方式都是同步的。阻塞和非阻塞的区别是,阻塞是挂起,非阻塞是轮巡,共同点是,都无法继续执行io操作所在线程的余下操作,所以是同步的。还可以是异步的,异步的话,数据会从设备控制器-设备驱动程序,内核-内存,自动完成,可以继续执行io操作所在线程的余下操作。...原创 2019-05-27 17:27:10 · 189 阅读 · 0 评论 -
实操--文件分叉---inode占用以及磁盘空间查看
https://blog.youkuaiyun.com/xiaqunfeng123/article/details/51766020文件存储在块中(一块=n个扇区),文件元信息存储在inode中。又称索引节点。inode也会消耗硬盘空间,格式化硬盘空间,都是删除inode.操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息...原创 2019-05-23 21:54:10 · 1903 阅读 · 0 评论 -
文件系统补充-io的阻塞和非阻塞
头文件:#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>定义函数: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t ...原创 2019-05-23 21:07:59 · 500 阅读 · 0 评论 -
linux内核源码分析与探索05-文件系统
原创 2019-05-23 20:44:17 · 245 阅读 · 0 评论 -
linux源码分析与探索04-进程与进程调度
进程四要素:执行的程序;堆栈空间;内核中的户口-线程也有的;用户空间。原创 2019-05-23 20:44:08 · 249 阅读 · 0 评论