
Linux
文章平均质量分 79
coder林宇恒
这个作者很懒,什么都没留下…
展开
-
【Linux】网络基础3
主机R发送后,局域网内每台主机都会收到并处理,其它主机发现第一个字段是全f那就必须处理,然后看帧类型是0806就知道要往上交付给arp软件层,得到arp报文后先看op字段判断是请求还是应答,如果是请求就看目的地址发现和自己不匹配直接丢弃,如果匹配那么我们就要封装应答发一个mac帧,主机R收到后,根据帧类型向上交付,arp软件层收到后先看op, 发现是应答就提取对方的ip和mac, 不同的op决定了不同的行为。原创 2025-05-22 11:51:45 · 928 阅读 · 0 评论 -
【Linux】网络基础2
rst: 要求重新建立连接,因为有可能会建立失败,如下图客户端三次握手中,第三次发出应答之后,客户端就认为连接成功了,但是客户端并不知道发出的应答对方会不会收到,假如服务端没收到ack, 这时客户端继续往下走发送数据通信,然后服务端收到数据后很诧异,我们明明还没建立连接怎么就通信了,所以服务端就会发送rst让对方重新连接。如果全连接队列满了,客户端再发起连接请求时,客户端可以进入连接成功的状态,但是服务端只会停留在syn_recv状态,这种状态叫半连接,系统也会用半连接队列维护,但是会定期释放。原创 2025-05-13 17:10:46 · 844 阅读 · 0 评论 -
【Linux】网络编程
每一个用户登陆都会产生一个会话,会话里面会生成bash进程提供命令行服务,一个会话可以有一个前台进程多个后台进程,键盘和信号只能影响前台进程。多进程版,子进程会继承文件描述符信息,让子进程负责IO就可以把监听套接字关了,父进程不关注IO也可以把不需要的文件描述符关了。popen把字符串当成命令,创建子进程,父子进程建立管道,子进程执行命令,结果返回给父进程。利用孙子进程解决,把事情给孙子进程做,子进程直接退出,父进程也等待完毕。任务是一个具体事情,它可以被一个进程完成,也可以被一个进程组完成。原创 2025-04-10 21:18:43 · 1052 阅读 · 0 评论 -
【Linux】网络概念
1号主机发送数据,其他主机都会收到,在数据链路层判断目的mac是否是自己,不是就丢弃,是就把有效载荷交给上一层处理。如果网卡是混杂模式,那么无论是不是发给自己的,都交给上一层处理。交换机可以减少数据扩散范围,假如1号发给7号,那么交换机就可以不让数据扩散到右侧。局域网协议包含以太网,令牌环网,无线wlan。mac地址是网卡出厂就有的地址,全球唯一。数据链路层的报头包含源man和目的mac。网络层和传输层就是操作系统的一部分。多个主机同时发消息会出现数据碰撞。发送与接收,封包与解包。原创 2025-03-31 19:22:55 · 199 阅读 · 0 评论 -
【Linux】线程
子进程会拷贝父进程的PCB,地址空间,页表。而线程只用拷贝进程的PCB,进程会分享一些地址空间的资源给线程使用。linux对线程的实现方案复用了进程pcb,并没有重新写tcb重新理解进程进程包括多个执行流(PCB,线程),地址空间,页表以及占用的部分物理内存。线程和进程的理解CPU不用关心当前执行的是线程还是进程,CPU只有执行流的概念。原创 2025-03-26 21:11:09 · 667 阅读 · 0 评论 -
【Linux】信号
前台进程ctrl c 是2号信号给信号设置自定义动作键盘输入数据完成后,会通过硬件中断提醒CPU,操作系统提取对应中断号去中断向量表执行对应方法。异步。原创 2025-03-10 14:53:46 · 936 阅读 · 0 评论 -
【Linux】进程间通信 续
文件描述符表,文件的加载,内存中生成一个文件对象,每个文件对象有inode,方法集,文件缓冲区,磁盘中的文件属性加载到inode,文件内容加载到文件缓冲区。父进程同时用读方式和写方式打开管道文件,会创建读文件对象和写文件对象,但它们是同一个文件,都是同一个inode,同一个方法集,同一个缓冲区。不同进程通信的前提是看到同一份资源,为了保证同一份资源我们就用了路径+文件名确定,因为具有唯一性,所以叫命名管道。不同的进程会以读写方式打开不同的文件对象,但都指向同一个文件的inode,方法集,缓冲区。原创 2025-03-05 22:32:51 · 908 阅读 · 0 评论 -
【Linux】进程间通信
目录进程间通信什么是进程间通信?为什么要进程间通信?怎么做进程间通信? 一个进程给另一个进程发送基本数据。一个进程给另一个进程发送命令控制进程。多个进程协同工作。通知进程。两个标准:systemV,posix管道与两个标准无关。原创 2025-02-24 22:22:49 · 192 阅读 · 0 评论 -
【Linux】动静态库
如果读到call指令,CPU会发现这是函数调用,CPU读到的指令内部可能有地址,这个地址是逻辑地址,也就是虚拟地址,所以就直接用虚拟地址去找物理地址。gcc编译时,会去系统默认库路径下找库文件,加L后面跟路径就是告诉系统来这个路径找库文件,加l后面直接跟库的名字就是告诉系统我要链接这个库。第二步,用虚拟地址去页表找物理地址,但此时并没有建立映射,此时会触发缺页中断,然后加载程序,建立映射。这里报的是加载错误,就是你还得告诉系统,告诉加载器,不仅编译要有路径,加载也要有路径。(编译器要考虑操作系统)原创 2025-02-23 18:12:19 · 705 阅读 · 0 评论 -
【Linux】软硬链接
项目中的exe文件可能在很深的目录中,为了方便执行,会给exe创建一个快捷方式就是软链接。ln建立链接,-s就是soft,软链接的意思。随意允许对目录进行硬链接会造成环路问题。软链接类似于windows的快捷方式。ln建立链接,不加-s就是硬链接。查看inode编号。原创 2025-01-31 22:39:16 · 233 阅读 · 0 评论 -
【Linux】文件系统
新建文件的流程:路径可以知道自己所在的分区,然后分区内每个组的GDT可以知道inode是否有剩余,确定组后inode位图可用知道哪个inode可用并给你对应的inode编号,然后就去inode Table写入对应文件属性,然后到写入文件内容,写入前会获取你要写入的大小从而确认要用多少数据块,然后在Block Bitmap找对应数量可使用的数据块并返回这些数据块编号,这些编号会填到inode结构体里面的数据块数组中,然后在对应编号的数据块里面写入内容。inode位图负责判断对应的inode内容是否有效。原创 2025-01-30 12:59:27 · 888 阅读 · 0 评论 -
【Linux】磁盘
与磁头运动频率有关。原创 2025-01-27 22:42:53 · 335 阅读 · 0 评论 -
【Linux】重定向,dup
close(1)就是把下标1的内容清空。然后下次再打开文件时,下标1的位置是最小的且没有占用的,所以就这个打开的文件struct file就放在这个下标里。重定向是修改进程内核数据结构的内容,程序替换是替换原本的程序是在内存层面上的,对进程不影响。把显示器文件关闭后,本来应该写给显示器文件的,却写到了普通文件。把oldfd的内容拷贝给newfd。拷贝的是下标对应的内容。不写几号文件默认是1,写了就代表几号文件的输出重定向。write只需要往1里面写,并不会考虑1是谁。2>&1表示把下标1的内容给下标2。原创 2024-11-22 21:15:33 · 505 阅读 · 3 评论 -
【Linux】文件接口,struct file, 文件描述符表,FILE
文件被打开,文件属性先被加载到内存,文件内容是否加载看你是否读取。原创 2024-11-20 11:09:48 · 513 阅读 · 0 评论 -
【Linux】实现一个简易的shell
8162425 //获取用户名27 {29 }3031 //获取主机名33 {35 }3637 //获取当前路径39 {41 }4244 {4749 //这里s无论如何都不可能为空,50 //因为什么都不输入都至少有一个回车,51 //所以空就是出错了。53 (void)s;5455 //把输入的回车去掉58 }5961 {67 }6870 {73 {75 return;76 }78 {原创 2024-11-20 10:42:54 · 728 阅读 · 0 评论 -
【Linux】进程程序替换
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。linux形成的可执行程序是elf格式,这种格式最开始有可执行程序的表头,可执行程序的入口地址就在表里面。把自己的代码和数据替换成其他的代码和数据,然后再执行一遍新的代码。程序替换没有创建新进程,只进行进程的代码和数据的替换。程序替换后,替换函数后面的代码不会执行。原创 2024-11-19 11:53:35 · 386 阅读 · 0 评论 -
【Linux】进程等待
子进程退出时会把退出信息比如退出码,终止信号记录在自己的PCB上,waitpid检测到你是Z状态就会把这些信息拿到给status,所以waitpid的本质是获取该进程的PCB其中的某些数据,然后把Z状态改为X。0表示阻塞等待,子进程没结束父进程就一直等待,一直在子进程PCB等待队列中,等着子进程PCB的退出信息。因为父进程关心子进程的信息挺多,所以要分几部分,比如是否异常退出,结果是否正确。父进程通过调用wait/waitpid进程僵尸进程的回收。通过进程等待可以保证父进程是多个进程中最后一个退出的进程。原创 2024-11-18 17:23:56 · 597 阅读 · 0 评论 -
【Linux】进程创建,进程终止
从技术上讲,当你创建子进程时,父进程完全可以把代码和数据全部拷贝过去,但万一需要写入的数据只有少数,剩下的数据只需要读取,这样相当于有大量重复内容,造成空间浪费,所以写时拷贝是一种按需申请,等你要用时再给你进行拷贝写入。如果你是只读数据那么权限还是只读,如果你是可读写那么第一次权限改成暂时的只读,当你要写入时,遇到暂时的只读会触发写时拷贝,并且把这个暂时的只读改为可读写。通常,父子代码共享,父子不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。12是当前进程的退出码。原创 2024-11-18 10:37:55 · 361 阅读 · 0 评论 -
【Linux】虚拟地址空间,页表,物理内存
每个存储单元是一个字节,一共有2^32个字节,大概有4G。栈往下走,堆往上走。static修饰的局部变量编译的时候会被编译到全局数据区。如下图,父子进程访问同一个变量,子进程修改了一下变量,如何做到同一个地址,却读到了不同的内容?答:因为这个地址不是物理地址,这个地址是虚拟地址或线性地址,平时语言用的地址都是虚拟地址。原创 2024-11-16 16:32:05 · 586 阅读 · 0 评论 -
【Linux】进程状态,优先级,环境变量
进程状态,优先级,环境变量原创 2024-11-15 12:08:51 · 1164 阅读 · 0 评论 -
【Linux】指令,权限
基本指令,指令运行原理,权限原创 2024-11-05 19:46:10 · 1181 阅读 · 0 评论 -
【Linux】工具和软件
yum, vim, gcc/g++, makefile, git, gdb原创 2024-11-06 17:22:11 · 525 阅读 · 0 评论