![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux学习
文章平均质量分 90
成分不含牛奶
深圳大学2022级新生,信息管理与信息系统专业,转码进行时
展开
-
Linux网络编程:epoll
epoll多路转接的实现是基于三个系统调用的,而这些系统调用底层是epoll模型的构建,和设置的结构体、数据结构之间的交互,我们需要一步步地进行epoll的学习!如图:epoll_create是创建一个句柄, 也就是标识一个对象的值,而在操作系统层面,创建的这个句柄本质上是一个文件描述符,指向着epoll模型。也就是epoll_create的调用是创造一个epoll模型,那什么是epoll模型?原创 2024-06-17 20:46:24 · 671 阅读 · 0 评论 -
Linux网络编程:多路转接|select|poll
多路转接(也称为IO多路复用)是一种网络通信的手段或机制,它允许一个进程同时监听多个IO事件,并在任何一个IO事件准备就绪时进行处理。这种机制可以大大提高程序的并发性能和响应速度。定义多路转接是一种IO模型,它允许单个进程或线程同时监听多个文件描述符(如套接字、管道等)的状态变化,从而能够处理多个IO事件。核心特点并发性:通过同时监听多个文件描述符,多路转接可以在单线程/进程的场景下实现并发处理。非阻塞:在监听过程中,进程/线程不会被阻塞,直到有文件描述符就绪。事件驱动。原创 2024-06-14 19:16:47 · 554 阅读 · 0 评论 -
Linux网络编程:五种IO模型
在我们过去的学习中,我们对于IO的认识局限于input、output,也就是输入和输出,即对外设的访问,与计算机外部设备(如键盘、显示器、磁盘等)之间的数据交换。但是这在我们过去对IO接口的使用,例如:recv、send、write、scanf等函数时,我们能够感受到IO的本质就是在不同的缓冲区之间做数据的拷贝,并且在这个过程中会“等待”,比如recv函数需要数据写入到缓冲区中,scanf需要等待键盘写入……IO的本质:等待数据的就绪 + 拷贝数据到相应的缓冲区。原创 2024-06-13 15:29:38 · 570 阅读 · 0 评论 -
Linux网络编程:回顾网络通信
这时我们就能够清晰的理解,除了在应用层需要拷贝到传输层,其他场景下我们都是对sk_buff指针进行偏移,然后不断向下交付,最终从网络中发送。那么我们在另一台主机对接收到的数据报文,那么是如何从数据链路层到应用层被我们看到的呢?所以数据的封装和解包分用的实现都是通过指针的偏移,这也是因为在传输层数据已经经过了应用层协议的序列化而形成了字节流数据,本质上就是char* 数组维护的一段数据,所以我们将不同形式的数据转化成了字节流,并且实现了不同主机的统一!!!原创 2024-06-05 18:09:12 · 1004 阅读 · 0 评论 -
Linux网络编程:数据链路层协议
为什么需要数据链路层我们在之前的学习知道了网络层实现将数据报文从远端A主机经过若干个路由器的转发,最终到达目的主机B。本质上就是数据从不同的局域网间进行转发直到转发到终点,比如家用主机转发到局域网中的家用路由器,家用路由器转发到局域网中的运营商路由器,最终在广域网这个“局域网”中转发到服务器!!!那么再按照相同的方式转发到目标主机B那么我们如何进行局域网之间的转发呢?也就是实现家用主机转发到家用路由器呢?这时我们就需要构建数据链路层协议来实现数据报文在局域网内进行转发。原创 2024-06-05 14:56:28 · 1187 阅读 · 0 评论 -
Linux网络编程:网络层协议|IP
我们知道数据报文离开发送端后,并不是直接发送到接收端主机的,需要不断的通过中间节点(路由器)转发,不断路由直到到达接收端路由的过程,就是这样一跳一跳 “问路” 的过程。“一跳”就是数据链路层中的一个区间。具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间在智能手机未普及的时代,人们去一个很远的地方,是需要进行不断的问路,一步一步的从一个终点走到一个新的起点,再继续问路,直到最后走到目的地。当IP数据包,到达路由器时,路由器会先查看目的IP。原创 2024-06-04 01:21:48 · 1212 阅读 · 0 评论 -
Linux网络编程:传输层协议|UDP|TCP
历经4天,万字长文,传输层协议TCP/UDP学习参上!!!原创 2024-05-27 18:20:44 · 1352 阅读 · 0 评论 -
Linux网络编程:应用层协议|HTTPS
数据摘要是一种映射机制,并不是一种加密方式,我们知道一段数据可以通过hash函数映射为一个值,当这个值改变时所对应的hash映射值会产生改变。并且即使是一篇文章中,我们只修改了一个单词,最终hash映射值也会产生不同。原创 2024-05-26 17:51:55 · 1109 阅读 · 0 评论 -
Linux网络编程:应用层协议|HTTP
我们知道OSI模型上层分为应用层、会话层和表示层,我们接下来要讲的是主流的应用层协议HTTP,为什么需要这个协议呢,因为在应用层由于操作系统的不同、开发人员使用的语言类型不同,当我们在传输结构化数据时,会导致端到端之间有差异。为了抹去这种差异,我们需要对用户、开发人员使用的应用层进行协议的定制……在讲HTTP协议之前,我们知道“协议”是一种约定,“协议”是客户端、服务器定制的一种标准,“协议”的本质是一种结构化数据。那么HTTP协议本质上也是一种结构化数据,是客户端、服务器的一种对于多种场景的通用标准!原创 2024-05-25 22:53:26 · 1102 阅读 · 0 评论 -
操作系统:线程互斥|线程同步|锁的概念
死锁是指在一组进程(或线程)中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。简单来说:死锁就是程序员写的一个bug,在这个bug中线程、线程因为需要等待锁资源锁出现了互相等待资源的情况。// 定义全局锁// 全局使用锁// 给每个线程进行死循环抢票while (1)// 进行加锁else// 不进行解锁break;单个锁也可能出现死锁问题。原创 2024-05-03 01:49:25 · 1038 阅读 · 1 评论 -
操作系统:线程
在前面的学习中,我们知道进程是一种处理任务的执行流,操作系统中的大部分任务都由进程来处理,而进程的创建,需要开辟内存来产生进程PCB、进程虚拟地址空间、页表……,而这个进程的创建成本较大,于是操作系统实现了另一种执行流------线程。线程是比进程更加轻量化的一种执行流,线程是进程内部的一种执行流。线程是CPU调度的基本单位,进程是承担系统资源的实体。原创 2024-05-01 22:07:37 · 896 阅读 · 0 评论 -
操作系统:进程信号
信号是一种向目标进程发送通知信息的一种机制,也称为进程之间事件异步通知的一种方式,属于软中断。原创 2024-04-29 00:02:27 · 543 阅读 · 0 评论 -
操作系统:进程间通信 | System V IPC
System V IPC(系统5的进程间通信)是在Unix操作系统上实现进程间通信(IPC)的一种机制。它引入了一大类进程间通信方法,包括共享内存、消息队列和信号灯集等IPC对象。每个IPC对象都有唯一的ID,这个ID在创建时由系统分配,并且IPC对象在创建后一直存在,直到被显式地删除或系统关闭时自动释放。在这篇博客中,我们重点介绍System V IPC中的共享内存部分,以及学习消息队列、信号量的一些接口的使用和 Linux下实现的System V IPC统一的数据结构体系……原创 2024-04-25 21:19:44 · 1044 阅读 · 1 评论 -
操作系统:进程间通信 | 管道
进程间通信(Inter-Process Communication,简称IPC)是指在不同进程之间传播或交换信息我们知道:进程之间是独立的,所以进程之间的进程间通信一定不是两个进程直接通信的,为了保证进程间的独立性和实现进程间通信,操作系统就设计了若干种进程间通信方式,来实现多进程之间的协同工作。原创 2024-04-23 16:04:15 · 662 阅读 · 1 评论 -
操作系统:动静态库
当我们从文件的代码区出发,运行代码的本质就是地址的跳转,但是代码区相当于只存储了代码的声明,实现在库中,所以我们就需要代码区进行到某个函数时跳转到对应共享区的部分,通过偏移量,映射到内存中代码的实现!在Linux中可执行文件一般以ELF的格式出现,符号表中存放着调用某些库的方法的地址,那也就是当可执行文件加载进内存时,进入内存的只有文件中对应库方法的地址,而没有库中的实现,也就对应了我们之前没有将动态库加载进内存中会出现报错!而运行动态库是和可执行程序分离的,所以需要将动态库加载到内存中。原创 2024-04-03 12:42:05 · 704 阅读 · 0 评论 -
操作系统:浅谈文件系统
我们知道文件可以分为:已被打开文件(被进程加载) 和 未被打开文件(在磁盘中保存)这两种文件,而我们对文件的学习也不能只局限于 对被进程打开的文件,因为大部分文件都不是被打开的,而是在磁盘中。这就引申到了操作系统是如何管理未被打开文件,并如何将他们从磁盘中加载到内存,并被进程调用的呢?这就是我们接下来要讲的文件系统的知识了。原创 2024-04-02 12:34:38 · 931 阅读 · 0 评论 -
操作系统:初识文件
对于一个描述文件的结构体,不仅存放着关于文件的所有内容和属性,还拥有着一块属于自己的缓冲区。当我们在进行对文件的读取时,需要将文件数据加载到内存。如果需要进行写入时也是需要加载数据到内存中。而这这些数据一般存放在文件定义的这一块文件缓冲区中!那么用户在应用层进行数据读写的本质就是:在内存进行数据的读写后,再进行内存与外存之间的拷贝,也就是 将内核缓冲区的数据进行来回的拷贝!!!原创 2024-03-27 16:51:35 · 738 阅读 · 0 评论 -
操作系统:进程控制(下)
这里我们发现了一个很有意思的东西,我们之前讲过fork函数给父进程返回子进程的pid,而这里的进程等待判断关系 rid 和 id也是相等的,这也就说明了,fork函数给父进程返回子进程的pid的本质就是为了方便对子进程进行进程控制,在这里表现为等待子进程,并回收!如图是:一个进程在创建过程中的示意图,我们知道对于一个进程会创建一份的代码和数据,当我们使用execl函数时,本质上就是加载另一个程序,用新程序的代码和数据来替换这一份的代码和数据,这时进程的属性不发生改变,发生改变的只有加载到物理内存的部分!原创 2024-03-18 13:59:40 · 1035 阅读 · 0 评论 -
操作系统:进程控制(上)
发生写入之后,操作系统就会发现权限冲突,于是修改权限,接着写入新的数据并开辟一块新的空间,将对应数据的页表连接新的物理内存。当父进程形成子进程后,子进程为了写入,发生写时拷贝,重新申请空间,然后修改页表。如图我们代码中返回11,外部bash进程接收这个进程的退出码11并返回,同理第二次接收的是echo这个指令,正常并返回0(return 0正常终止,并完成)。进程终止后,它的相关信息会从操作系统的进程表中删除,资源会被回收,以便其他进程可以使用,确保系统资源的有效利用和进程间的良好协作。原创 2024-03-13 15:37:28 · 570 阅读 · 0 评论 -
操作系统:进程地址空间
我们在学习C/C++时,对于各组分的地址分配在程序地址空间的不同模块如图我们能够验证各组分的对应的地址排布位置,但是我们可以看到堆是向上排布,栈是向下排布这个怎么验证呢?所以我们验证了堆的开辟是有下到上,栈的开辟是由上到下,堆栈相对而生,并且我们可以发现堆栈之间有一块大的空白(这也是栈溢出发生的原因)另外,在栈区中,我们知道地址是由高到低排布的,然而一个整型变量 int a;原创 2024-03-11 23:43:24 · 775 阅读 · 0 评论 -
操作系统:环境变量
如图:在Linux操作系统中我们跑这一段程序,发现结果分别打印了,程序名 + 我们写的一段话的每一部分(这里有以空格为分隔符,分割几份子串),数一数恰好从0-8一共有9份,我们再看回这一段代码,我们可以猜到argc = 9,也就是九个字符串,并且对应着这个指针数组,那么我们可以抽象出来。答:首先环境变量里在系统中以“脚本配置文件”的形式存储,当我们启动时会重新生成对应的环境变量信息,也就是就算修改了bash的环境变量,也只是修改了加载在内存时的环境变量表,并不影响磁盘中存储的“脚本配置文件。原创 2024-03-11 01:47:51 · 698 阅读 · 0 评论 -
操作系统:进程优先级
就是进程在运行队列排队时,当第一次被CPU调度,会产生一份进程上下文,当在这个时间片完成调度后,这段上下文会被保存在进程PCB相关的结构体tss_struct中,然后再把排队的下一个进程PCB的上下文放入寄存器中,这样CPU通过读取放入的上下文就知道从哪里开始继续将这个进程运行下去。以上是进程相关的一些概念,一般情况下,多个进程都是在一个CPU上被调度,并且多进程场景下在任意时刻,都会出现多个单进程在某一个时间片内快速切换,CPU进行运算,进行高频切换进程,这时候处于进程的“并发”NI:优先级的修正数值。原创 2024-03-08 21:23:00 · 538 阅读 · 0 评论 -
操作系统:进程状态
进程状态是指一个进程在其生命周期中所处的不同状态。原创 2024-03-08 13:26:41 · 1175 阅读 · 0 评论 -
操作系统:进程
再结合我们进程会有相应的PCB,那么创建子进程后会以父进程为模版,为子进程创建PCB,并且和父进程共享代码和数据(当数据修改时,需要进行写时拷贝,各自拥有一份,防止破坏进程之间的独立性),并且在不同的时间片各自被CPU调度,继续往后执行,这里也体现了进程的独立性。我们在实际使用计算机的场景中,操作系统会同时运行多个程序,也就是拥有多个进程,我们从操作系统的思想“先描述再组织”中可以知道,为了便于管理,就需要描述个体程序,然后用数据结构串联,这里也就是进程和程序的差别。接下来我们用一个程序的场景来描述一下。原创 2024-03-06 21:13:40 · 804 阅读 · 0 评论 -
Linux:常见Linux指令
1。原创 2024-03-06 11:18:58 · 253 阅读 · 0 评论 -
操作系统:初识操作系统
操作系统是一款“进行软硬件资源管理”的软件。即链接用户与计算机底层的桥梁。原创 2024-03-05 23:34:21 · 321 阅读 · 0 评论