linux
文章平均质量分 86
yoouuung_
码农进阶…
展开
-
Linux IO多路转接之epoll
有的地方说,epoll使用了内存映射机制,内存映射机制是:内核直接将就绪队列通过mmap的方式映射到用户态,避免了拷贝内存这样的额外性能开销。这种说法是不准确的,我们定义的struct epoll_evnet是我们在用户空间中分配好的内存,势必还是需要将内核中的数据结构拷贝到这个用户空间的内存中的。这些事件都会挂载在红黑树中,如此重复添加的事件就可以通过红黑树而高效的识别出来(红黑树的插入效率是logn,其中n为树的高度)在epoll中,对于每一个事件,都会建立一个epitem结构体。原创 2023-12-05 15:08:33 · 1131 阅读 · 0 评论 -
Linux多路转接select,poll
本文主要介绍了select和poll,下一篇文章详解epoll。原创 2023-11-27 16:22:45 · 899 阅读 · 0 评论 -
linux网络之网络层与数据链路层
路由表的destination是目的网络地址,GENMASK是子网掩码,gateway是下一跳地址,iface是发送连接口,flags中的u表示此条目有效,g表示此条目的下一跳地址是某个路由器地址,没有g标识的标识目的网络地址是与本机接口直接相连的网络,不必经过路由器转发。3位标志字段:第一位保留(保留的意思是暂时不用,将来可能会用到),第二位置为1表示禁止分片,这个给时候如果报文长度如果超过MTU,ip模块就会丢弃报文,第三位置表示更多分片,如果分片的话,最后一个分片置为1,其他是0,类似一个结束标记。原创 2023-11-23 21:44:40 · 992 阅读 · 0 评论 -
Linux网络之传输层协议tcp/udp
由于我们的请求量很大, 就可能导致TIME_WAIT的连接数很多, 每个连接都会占用一个通信五元组(源ip, 源端口, 目的ip, 目的端口, 协议). 其中服务器的ip和端口和协议是固定的. 如果新来的客户端连接的ip和 端口号和TIME_WAIT占用的链接重复了 , 就会出现问题.确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候。原创 2023-11-16 17:28:20 · 646 阅读 · 0 评论 -
Linux网络应用层协议之http/https
文章目录目录一、http协议1.URL2.http协议格式3.http的方法4.http的状态码5.http常见header6.实现一个http服务器二、https协议1.加密2.为什么要加密3.常见的加密方式对称加密非对称加密4.https的工作过程探究方案1 只使用对称加密方案2 只使用非对称加密方案3 双方都使用非对称加密方案4 非对称加密+对称加密中间人攻击引入证书CA认证方案5 非对称加密+对称加密+证书认证https的整个工作流程小结总结1.网络版本计算器例子例如,现在要在服务器端实现一个加法器原创 2023-11-15 21:06:00 · 1278 阅读 · 2 评论 -
网络编程套接字socket
connect函数试图与套接字地址为addr的服务器建立一个因特网连接,其中addrlen是sizeof(sockaddr_in)。ipv4/ipv6的地址格式定义在netinet/in.h中,ipv4地址用sockaddr_in结构体表示,包括16位地址类型,16位端口号和32位ip地址ipv4/ipv6地址类型分别定义位常数AF_INET 、AF_INET_6,只要取得某种sockaddr的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容。原创 2023-10-17 17:32:05 · 175 阅读 · 1 评论 -
Linux入门-网络基础|网络协议|OSI七层模型|TCP/IP五层模型|网络传输基本流程
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。协议是一种约定,计算机之间传输媒介是光电信号,通过频率或强弱来标识0、1信息,想要传递不同的信息,就需要约定好双方的数据格式。OSI七层网络 模型称为开放式互联参考模型,是一个逻辑上的定义和规范。tcp/ip是一组协议的代名词,它还包含了许多协议。原创 2023-09-11 14:33:24 · 610 阅读 · 0 评论 -
Linux入门之多线程|线程的同步|生产消费模型
剖析生产消费模型以及手写实现原创 2023-09-07 11:30:52 · 354 阅读 · 0 评论 -
Linux入门之多线程|线程|进程基本概念及库函数
物理内存不是按字节划分的,如果按字节划分,频繁的操作io,注定过多的寻址,就会导致过多的机械运动,所以效率十分低下,所以os和磁盘设备进行交互的时候,是按块为单位。os对物理内存也有自己的管理方式,里面存储每块的属性。实际上虚拟地址是按照10+10+12来划分的,首先高10位,找到第一级页表(页目录),kv找到第二级的页表(中间10位地址在这个页表内kv)找到物理内存对应页框的起始地址,最后用虚拟地址的后12位对应的数据地址找到页内偏移,即采用基地址+偏移量的方法,在物理内存中定位任意一个内存字节的位置。原创 2023-09-03 21:40:45 · 157 阅读 · 2 评论 -
Linux入门之多线程|线程的互斥|锁|封装线程|封装锁|死锁
一、线程互斥1.概念二、线程互斥接口1.互斥量的接口初始化互斥量互斥量的的加锁和解锁销毁互斥量2.互斥量的原理三、线程的封装四、锁的封装五、死锁1.死锁的概念2.产生死锁的必要条件:3.避免死锁:核心思想 破环死锁的4个必要条件的任意一个总结 2.动态分配互斥量的的加锁和解锁销毁互斥量不要销毁一个已经加锁的互斥量已经销毁的互斥量,要确保后面不会有线程再尝试加锁2.互斥量的原理三、线程的封装四、锁的封装五、死锁多线程代码存在并发访原创 2023-09-05 17:36:35 · 81 阅读 · 0 评论 -
Linux入门之进程信号|信号产生的方式
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到编号34以上的信号都是实时信号。原创 2023-09-01 12:02:23 · 900 阅读 · 0 评论 -
Linux通信--构建进程通信System-V 消息队列|信号量
信号量本质就是一个计数器(int count) ,用来描述资源的数量。信号量类似于看电影买票,就是一种预定机制,买票成功后座位锁定。执行流想要访问临界资源中的一个子资源(临界区中有很多临界资源),进入临界区之前,首先要申请信号量(进程申请信号量),退出临界区,释放信号量。被任意一个进程可以看到的资源称为公共资源。但是有些资源需要互斥使用,比如一个进程读,一个进程写,还没写完就不允许读。如果count = 1,就称为二元信号量,完成了互斥的功能。所以,所有的进程都首先要看到信号量,信号量就是共享资源。原创 2023-08-30 17:00:15 · 313 阅读 · 0 评论 -
Linux基础--文件描述符
pcb中有一张表,存放文件描述符,表中存放struct_file指针,通过表中数组下标索引找到对应文件指针,进而访问文件。所以,本质上文件描述符就是该数据的下标,所以拿到了fd,就可以找到对应的文件。但是对于一个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越多,会占用大量。oldfd指向a.txt,newfd指向b.txt,调用成功后,newfd和b.txt关闭,newfd指向a.txt(oldfd被保留)通过open函数,文件描述符就是一个整数。原创 2023-08-30 19:07:22 · 134 阅读 · 0 评论 -
Linux通信--构建进程通信IPC的方案之共享内存|实现使用共享内存进行server&client通信
共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程地址空间,这些进程间数据传递不再涉及到内核,即进程不再通过执行进入内核的系统调用来传递彼此的数据。原创 2023-08-30 21:17:26 · 404 阅读 · 0 评论 -
Linux通信--构建进程通信的 方案之管道(下)|使用匿名管道实现功能解耦|命名管道实现serve&client通信
需求分析:首先需要创建两个进程,client端和server端,还需要一个common文件来声明共同的定义和方法,所以创建三个文件client.cc,server.cc,common.hpp。1.首先,创建管道,只需要创建一次即可,本次案例在server.cc中创建,client.cc中使用即可。3. 进程A 向管道中写入 进程B从管道中读取并打印到标准输出。3.client端不需要创建文件,只用写方式打开文件就可以。2 创建的命名管道可以让两个进程通信。参数:管道的名字,创建的管道权限。原创 2023-08-29 21:29:22 · 309 阅读 · 0 评论 -
Linux入门--构建进程间通信的方案之管道(上)
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知他们发生了某种时间(如进程终止时要通知父进程)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是Unix中最古老的进程间通信的方式将一个进程连接到另一个进程的一个数据流称为 -- 管道通常用来具有血缘关系的进程,常用于父子通信。原创 2023-08-28 19:44:58 · 160 阅读 · 4 评论 -
Linux入门--linux系统的理解
Linux入门原创 2022-11-15 16:00:36 · 632 阅读 · 0 评论 -
linux入门之进程控制(下)进程程序替换,shell运行原理,手写一个mini-shell
6.1-5号最终都调用6号,6号是os提供的系统调用,1-5号是对6号做的封装。原创 2023-07-10 14:30:43 · 139 阅读 · 0 评论 -
linux入门之进程控制(上)进程创建,进程等待
这里的status如果是0,就是正常终止,并且运行结果正确,如果非0,就是正常终止,但是运行结果错误。如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程的退出信息。在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程,新进程为子进程,原进程为父进程。通常,父子代码共享,父子不再写入时,代码也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。父进程在wait的时候,如果子进程没退出,父进程此时在等待子进程。原创 2023-07-05 20:42:11 · 347 阅读 · 1 评论 -
linux入门之进程概念(下)程序地址空间
比如,有一个富翁(os),有10亿美金(内存),给每个继承人(进程)都画了饼(进程空间地址),这个饼就是将来要继承的东西,此时这个饼需要被管理起来,以防富翁忘记采用先描述再组织的手段,struct mm_struct。我们在使用fork的时候,创建一个变量,在子进程中修改变量的值,但是不影响父进程打印原来的值,这是因为进程具有独立性,进程 = 内核数据结构+代码和数据,我们观察到&value的地址相同,所以该地址。1.同一个变量,地址相同,其实是虚拟地址相同,内容不同是因为被映射到了不同的物理地址。原创 2023-07-05 15:54:39 · 95 阅读 · 0 评论 -
linux入门之进程概念上(冯诺依曼系统,系统概念与定位,PCB,fork初识)
首先要明白,进程都是独立运行的,同样,父子进程也是独立运行的,他们看到的是相同的代码,但是代码是只读的,如果有一个进程修改了代码,不会影响另一个进程,这个过程叫写时拷贝,各自私有一份。当fork函数return 的时候,已经完成了前面创建子进程的工作(创建pcb),甚至可能已经被调度了,return也是语句,再向后执行,父进程被执行,return 跑了两次,所以有两个返回值。我们不难发现,当运行进程和父进程时,中止掉这个程序,再次运行,进程的id改变,但是父进程的id不变,并且,父进程的id就是bash,原创 2023-06-28 20:42:51 · 162 阅读 · 1 评论 -
linux入门之环境基础以及开发工具的使用(yum,vim,gcc/g++.makefile,gdb,git)
本文主要介绍了以下内容:1.yum工具,进行软件安装2.vim编辑器使用,学会vim的简单配置3.gcc/g++编译器的使用,并了解原理和过程4.简单gdb使用于调试5.Makefile的编写,了解其运行思想6.编写linux程序:进度条7.学习git命令行的简单操作,将代码上传到gitee,并学会使用git管理代码版本。原创 2023-06-27 16:29:13 · 808 阅读 · 0 评论 -
Linux入门之基本指令
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2023-06-26 21:08:19 · 882 阅读 · 0 评论