![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础篇-操作系统
小豆角
一个喜欢刨根问底的程序媛
展开
-
使用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 · 617 阅读 · 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 · 239 阅读 · 0 评论 -
一个连接的建立和数据的收发:干活的都是协议栈,驱动程序,网卡
服务端等待连接模块1.服务端进程创建套接字-创建套接字阶段描述符=socket(使用ipv4,使用tcp,...)//此过程,开辟了一个内存空间,返回的是这块空间的文件描述符,既分配用于套接字的内存空间2.将套接字设置为等待连接状态-等待连接状态bind(描述符1,端口号等,...) //把端口号写入套接字中,因为客户端在发起连接的时候,需要指定服务端的端口号listen(描述符1,...) //向套接字写入等待连接状态这一控制信息向套接字写入bind所指定的端口号,并等待...原创 2020-05-17 19:53:49 · 296 阅读 · 0 评论 -
工作中一个小问题,有关iscsi的
售前在跟客户演示块存储的使用,遇到一个需求,多个客户端挂载同一块虚拟盘,可否实现同步读写,一路问到我这里,虽然不是我一个小小的控制台开发力所能及的,但是多探索不是坏事,还是磕一下吧。我简单测试了下,通过客户端1挂载并使用了虚拟盘,写文件,然后通过客户端2挂载虚拟盘,可以看到客户端1写的东西。然后我又在客户端2写东西,客户端1没有得到同步,说明数据实时同步是不支持的,我把客户端2虚拟盘卸载掉,然后重新挂载,展示的还是客户端1的那些内容,说明客户端2的数据并没有真正持久化。怀疑一是iscsc协议的问题,原创 2020-05-09 16:46:02 · 892 阅读 · 0 评论 -
大爱一本书-linux内核源码分析上下册
在我抽屉里躺半年多了,此前看过电子的,喜欢的不行,买了纸质的在桌子里睡觉。昨天想看一下select()的实现,搜索到了设备驱动那一章节。非常透彻的讲解。基于linux2.4内核源码说的。计算机最基本的三个物质基础就是cpu 内存 以及IO设备(eg:网卡/硬盘),严格地说,离开了对设备的操作即IO操作,计算机本身也就失去了意义。文件操作是对设备操作的组织与抽象,而设备操作则是文件操...原创 2020-05-07 13:25:18 · 399 阅读 · 0 评论 -
select poll epoll IO多路复用模型
扎心了,不表。还是捋一下,很基础1.select poll epoll原创 2020-04-30 14:53:31 · 113 阅读 · 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 · 1766 阅读 · 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 · 823 阅读 · 0 评论 -
unix域套接字
Unix域套接字只能用于在同一个计算机的进程间进行通信。虽然网络套接字也可以用于单机进程间的通信,但是使用Unix域套接字效率会更高,因为Unix域套接字仅仅进行数据复制,不会执行在网络协议栈中需要处理的添加、删除报文头、计算校验和、计算报文顺序等复杂操作,因而在单机的进程间通信中,更加推荐使用Unix域套接字。------https://www.jianshu.com/p/43ed6e40...原创 2020-04-27 16:21:09 · 529 阅读 · 0 评论 -
nf_conntrack连接跟踪模块
https://blog.csdn.net/u010472499/article/details/78292811最近在看集群搭建时候内存优化的配置,对一条记录不解,故而查阅。/lib/modules/`uname -r`/kernel/net/netfilter/nf_conntrack.konf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个...原创 2020-03-25 11:38:44 · 424 阅读 · 0 评论 -
杂感源自知乎-计算机原理篇-1
在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远。函数调用的机制:函数处理是通过把程序计数器的值设定成函数的存储地址实现的,函数执行跳转指令后,必须滨兴返回处理,单纯的指令跳转没有意义。“程序不都如内存就无法运行”:计算机最主要的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容...原创 2020-03-16 12:43:44 · 214 阅读 · 0 评论 -
读书笔记-许式伟架构课-如何阅读源代码
读源代码的目的就是了解架构。我认为首先要找出来软件实体,然后理一下软件实体之间的关系。看源代码,我们首先要做到的是理解系统的概要设计。概要设计的关注点是各个软件实体的业务范畴,以及它们之间的关系。有了这些,我们就能够理解这个系统的架构设计的核心脉络。要理一下各个软件实体的业务范畴,以及它们之间的关系。有了这些,我们就能够理解这个系统的架构设计的核心脉络。有文档就先看文档,哪怕文档偏陈旧...原创 2020-03-11 11:16:41 · 331 阅读 · 0 评论 -
学习笔记-bilibili计算机速成课
文件格式:如何编码文字,声音,图片。我认为文件格式,就是二进制串的编码格式。无论是文本文件,声音文件eg.mp3格式,还是图形文件如.jpg格式,或者其他文件格式,底层都是长串二进制。储存器没有文件的概念,只是存储大量位,需要有个图书文件,记录其他文件位置,比如目录文件,目录文件会记录每个文件的名称,元信息,以及文件的其实和结束位置,这种存储文件的方式叫平面文件系统,文件都在同一个层次。...原创 2020-03-10 16:13:25 · 377 阅读 · 0 评论 -
读书笔记-许式伟架构课-4
外置存储是持久存储,它的目的是用来存储资料的。而内存是临时存储,虽然是存储,但是它实质上是为 CPU 的计算服务的。怎么让很多的软件进程同时使用这些外置存储设备,而不会乱呢?直接基于物理的存储地址进行读写肯定是行不通的,过上几个月你自己可能都不记得什么数据写到哪里了。所以和内存管理不同,外部存储的管理,我们希望这些写到存储中的数据是“自描述”的某种数据格式,我们可以随时查看之前写了哪些内容...原创 2020-03-09 15:57:57 · 162 阅读 · 0 评论 -
读书笔记-许式伟架构课-2
操作系统首先要解决的是软件治理的问题,大体可分为以下六个子系统:进程管理、存储管理、输入设备管理、输出设备管理、网络管理、安全管理等。操作系统其次解决的是基础编程接口问题。这些编程接口一方面简化了软件开发,另一方面提供了多软件共同运行的环境,实现了软件治理。商业价值来说,操作系统是基础的刚需软件。计算机离开了操作系统就是一堆废铜烂铁。随着个人计算机采购需求的急速增加,光靠软件 Licens...原创 2020-03-09 15:20:38 · 319 阅读 · 0 评论 -
Linux如何搭建Samba文件共享服务
https://baijiahao.baidu.com/s?id=1619078525576466832&wfr=spider&for=pcLinux如何搭建Samba文件共享服务最近由于学习方面的原因,时间比较紧,只能用零碎时间来整理文档,所以发文章的频率可能会没那么快了,希望亲爱的你们多多体谅。然后,因为发文慢了,我有个想法就是把我上课的笔记分享给你们看,但我不知...原创 2020-03-06 15:37:48 · 1471 阅读 · 0 评论 -
读书笔记-许式伟架构课读后感-1
1.程序员是一个门槛极低的职业2.cpu指令分为三类并且是及其有限的:计算类,也就是支持我们大家都熟知的各类数学运算,如加减乘除、sin/cos 等等。I/O 类,(从存储读写数据)从输入输出设备读数据、写数据。指令跳转类,在满足特定条件下跳转到新的当前程序执行位置。之所以这个有限的指令集能够组合无限多的软件,是因为,指令序列是无穷的,并且指令操作的数据也是各种不同,这就意味着...原创 2020-03-04 21:49:30 · 399 阅读 · 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 · 463 阅读 · 0 评论 -
从文件系统到磁盘
https://www.cnblogs.com/kexinxin/p/9939090.html"I/O控制为最底层,由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息传输。设备驱动程序可以作为翻译器。其输入由高层命令组成,如"retrieve block 123"。其输出由底层的、硬件特定的命令组成,这些命令用于控制硬件控制器,通过硬件控制器可以使I/O设备与系统其它部分相连。...原创 2020-03-04 16:00:22 · 228 阅读 · 0 评论 -
Linux文件系统详解
http://c.biancheng.net/view/880.html硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁...原创 2020-03-04 14:57:22 · 134 阅读 · 1 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
ZZ:https://www.ibm.com/developerworks/cn/linux/l-proc.html这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。/proc 文件系统包含了一些目录(用作组织信息的方式)...原创 2020-03-04 14:21:34 · 380 阅读 · 1 评论 -
读书:05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
作为应用陈谷的开发者。通过操作系统以文件的方式对硬盘读写,os的文件系统把硬盘以块划分,每个文件占据若干个块,然后通过一个文件控制块即FCB记录每个文件占据的硬盘数据块。这个FCB在os中是inode,访问文件必须获得文件的inode,在inode中查找文件数据块索引表,根据索引中记录的硬盘地址访问硬盘,inode中记录着文件的权限所有者修改时间。文件大小,等文件属性信息,以及文件数据块硬盘地...原创 2020-02-28 17:37:17 · 441 阅读 · 0 评论 -
读书笔记-许式伟的架构课-我的想到
1.疑问里有一个人问,既然cpu只和内存打交道,那磁盘io是如何进行的,大概是这个疑问吧,我一时语塞,想了一下,回复到外设都会以端口映射或者内存映射的方式,在内存中有个记录,所以cpu虽然是与内存打交道,但是通过内存也可以操作外设,因为外设被映射到内存。现在我补充下,地址是内存的概念,cpu只管告诉内存,地址和操作+数据,所以cpu看来是往一个地址输送指令或数据。而内存的作用只是用作存储,存储...原创 2020-01-03 10:20:29 · 282 阅读 · 0 评论 -
cpu指令如何读写硬盘
https://blog.csdn.net/farmwang/article/details/49999879在《cpu解读一》中,我们提到cpu的主要作用之一就是控制设备之间的数据交互。这其中自然也包括了硬盘。系统的所有数据基本都在硬盘中,所以知道怎么读写硬盘,对程序来说非常重要,所以我们先来探索下传说中的pio模式。cpu要想直接访问设备里的数据,必须对设备存储空间进行编址。而硬...原创 2020-01-02 12:02:48 · 1845 阅读 · 0 评论 -
inode-来自阮一峰大神的深刻理解
一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 s...原创 2019-06-23 21:35:56 · 185 阅读 · 0 评论 -
操作系统实用教程-IO系统
IO系统调用,可以阻塞+多线程,非阻塞+多线程,这两种方式都是同步的。阻塞和非阻塞的区别是,阻塞是挂起,非阻塞是轮巡,共同点是,都无法继续执行io操作所在线程的余下操作,所以是同步的。还可以是异步的,异步的话,数据会从设备控制器-设备驱动程序,内核-内存,自动完成,可以继续执行io操作所在线程的余下操作。...原创 2019-05-27 17:27:10 · 174 阅读 · 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 · 225 阅读 · 0 评论 -
linux内核源码分析与探索3-中断异常和系统调用
系统-内核要执行调度,cpu的控制权必须到系统手里,而通过中断,cpu根据中断源提供的中断向量,在内存中找到对应的服务程序入口,并调用该服务程序。3种中断方式,硬件中断:中断向量由软件和硬件设计好的;陷阱:程序发出的自陷指令;操作系统设置好的。异常:程序异常,由硬件设置中断向量表。...原创 2019-05-23 20:22:06 · 195 阅读 · 0 评论 -
linux内核源码分析与探索02-设备驱动即IO
设备驱动表!!!设备建立连接需要的信息:设备类型(字符,块)+主设备号=设备驱动程序;+次设备号原创 2019-05-23 15:02:21 · 125 阅读 · 0 评论 -
linux内核源码分析与探索01-预备知识
1.内核简介传统的操作系统,内核应具备多方便的功能或者成分,既包含用于管理属于应用层的 进程 的成分,也包含为这些进程提供的各种服务的成分,如进程间通信 设备驱动 文件系统等,内核中提佛那个各种服务的成分,与使用这些服务的进程之间形成了典型的 client-server 的关系,其实这些服务的提供者不一定都得留在内核中,他们本身也可以被设计并实现耨些服务进程,其中必须留在内核中的成分只有进程...原创 2019-05-23 14:28:47 · 145 阅读 · 0 评论 -
linux 5中io模型
https://blog.csdn.net/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 · 127 阅读 · 0 评论 -
研究同步异步-阻塞非阻塞
同步异步和阻塞非阻塞都是指的io时候的概念:阻塞非阻塞指的是自己:要不要等。同步异步,一般指的是并发:大家都来请求io,该怎样协调比如select被称作异步io。多线程是为了充分利用cpu的计算资源,而select,多路复用是为了利用计算机的io资源。一台计算机总共就这些资源。一个进程可以打开的文件个数是有限制的,文件描述符数目貌似是64?一个文件操作设计,open rea...原创 2019-05-17 20:57:24 · 161 阅读 · 1 评论 -
使用异步 I/O 大大提高应用程序的性能、学习何时以及如何使用 POSIX AIO API
https://www.ibm.com/developerworks/cn/linux/l-async/AIO 简介Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完...转载 2019-05-17 20:49:43 · 217 阅读 · 0 评论 -
linux如何添加系统调用
目录1)添加源代码2)连接新的系统调用3)重建内核4)用新内核启用系统5)使用之linux中除了libc库中已经存在的 系统调用,还可以添加新的系统调用,步骤如下:1)添加源代码2)连接新的系统调用3)重建内核4)用新内核启用系统5)使用之...原创 2019-05-22 18:07:38 · 497 阅读 · 0 评论 -
内核管理
os内核对数据的管理:原创 2019-04-07 22:35:37 · 195 阅读 · 0 评论 -
计算机操作系统之我理解
计算机帮人类完成两大类工作IO和运算处理。也就是说搬运和加工。搬运针对内存和io设备之间,从内存<-->到自己的网卡loopback/字符设备块设备/磁盘/内存的某块地方/到其他机器的网卡-则涉及到了网络-需要握手挥手和找探路兵拥塞控制之类的。文件是对空间的管理,这个空间是io的目的地,是仓库系统。io是运输系统。io下是各种设备驱动程序,再往下是设备控制器,再往下是设备...原创 2019-04-15 13:32:13 · 585 阅读 · 0 评论 -
linux源码分析与探索04-进程与进程调度
进程四要素:执行的程序;堆栈空间;内核中的户口-线程也有的;用户空间。原创 2019-05-23 20:44:08 · 219 阅读 · 0 评论 -
linux内核源码分析与探索05-文件系统
原创 2019-05-23 20:44:17 · 217 阅读 · 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 · 454 阅读 · 0 评论 -
图解linux中Inode-分析Linux如何通过Inode读取磁盘
https://blog.csdn.net/hello_hwc/article/details/404747631、什么是inode?首先要明白,linux中所有的东西都是文件,不管是目录还是命令操作系统读硬盘的时候,为了提高效率,一次性读取一个block(常见大小4KB),一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位而Inode就是帮助linux系...原创 2019-08-17 20:28:38 · 758 阅读 · 0 评论