Linux
文章平均质量分 86
linux
yolo0616
穷且益坚,不坠青云之志。
展开
-
Linux常用知识思维导图
Linux常用知识思维导图。原创 2024-01-07 21:26:00 · 401 阅读 · 1 评论 -
总结二:linux面经
GDB调试:gdb调试的是可执行文件,在gcc编译时加入 -g ,告诉gcc在编译时加入调试信息,这样gdb才能调试这个被编译的文件quit:退出gdb,结束调试list:查看程序源代码list 5,10:显示5到10行的代码list test.c:5, 10: 显示源文件5到10行的代码,在调试多个文件时使用list get_sum: 显示get_sum函数周围的代码list test,c get_sum: 显示源文件get_sum函数周围的代码,在调试多个文件时使用。原创 2023-10-06 18:08:43 · 1747 阅读 · 3 评论 -
二十九、高级IO与多路转接之epoll&reactor(收官!)
poll是Linux的事件轮询机制函数,每个进程都可以管理一个pollfd队列,由poll函数进行事件注册和查询。int fd;Reactor 翻译过来的意思是「反应堆」,可能大家会联想到物理学里的核反应堆,实际上并不是的这个意思。这里反应指的是「对事件反应」,也就是来了一个事件,Reactor 就有相对应的反应/响应。原创 2023-10-05 11:22:31 · 551 阅读 · 3 评论 -
二十八、高级IO与多路转接之select
理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。另外, 我们回忆在讲多进程多线程的时候, 也提到同步和互斥. 这里的同步通信和进程之间的同步是完全不相干的概念。其实这个结构就是一个整数数组, 更严格的说, 是一个 “位图”. 使用位图中对应的位来表示要监视的文件描述符.在内核将数据准备好之前,,系统调用会一直等待,所有的套接字,默认都是阻塞方式。使用F_GETFL将当前的文件描述符的属性取出来(这是一个位图).原创 2023-10-03 20:28:43 · 164 阅读 · 3 评论 -
二十六、传输层协议(下)
滑动窗口本质上是发送缓冲区中一个部分的起始指针和结束指针,滑动窗口向右滑动本质就是指针的右移(这里虽然是int类型,只要它指向一个位置,网络里就叫他指针)。目的是让数据批量化发送,一发一收的方式性能较低, 我们一次发送多条数据, 就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。tcp的发送缓冲区其实是被设计成为环状结构的,所以不必担心滑动窗口越界例如:这里客户端发送了4个报文,当客户端收到2001 32位确认序号的应答,表示1001~2001已传输成功,则start_index会向右走。原创 2023-07-15 21:13:56 · 323 阅读 · 1 评论 -
二十五、传输层协议(上)
端口号(Port) 标识了一个主机上进行通信的不同的应用程序;在 TCP/IP 协议中 , 用 " 源 IP", " 源端口号 “, " 目的 IP”, " 目的端口号 ", " 协议号 " 这样一个五元组来标识一个通信 ( 可以通过 netstat -n 查看 );TCP全称为“传输控制协议 (Transmission Control Protocol)”,人如其名,要对数据的传输进行一个详细的控制。TCP报文包含报头和有效载荷。TCP报头包括前2字节和选项。原创 2023-07-08 18:21:11 · 360 阅读 · 0 评论 -
二十四、HTTPS
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocketLayer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。HTTPS 存在不同于 HTTP的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。原创 2023-07-04 21:07:38 · 665 阅读 · 2 评论 -
二十三、HTTP
超文本传输协议,是一个无链接,无状态的应用层协议。原创 2023-07-04 09:02:25 · 153 阅读 · 1 评论 -
二十一、socket套接字编程(三)——守护进程
守护进程是一个在后台运行并且不受任何终端控制的进程。Unix操作系统有很多典型的守护进程(其数目根据需要或20—50不等),它们在后台运行,执行不同的管理任务。这两种是同一种进程的不同翻译,是特殊的孤儿进程,不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系,也就是默默的运行在后台不想受到任何影响,并且退出后不会成为僵尸进程。一般以服务器的方式工作,对外提供服务的服务器,都是以守护进程(精灵进程)的方式在服务器中工作的,一旦启动之后,除非用户主动关闭,否则,一直会在运行。原创 2023-07-04 08:59:32 · 104 阅读 · 0 评论 -
二十、socket套接字编程(二)——TCP
如果手动传./serverTcpd 8080 0,IP地址传的是0,此时inet_aton(0, &local.sin_addr) 即inet_aton第一个参数传的就是0,把值为0的本地字符串风格IP转网络4字节IP存入local.sin_addr中;总结:inet_aton(ip_.c_str(), &local.sin_addr) ip_为0时,inet_aton(0, &local.sin_addr) 等于 local.sin_addr.s_addr = INADDR_ANY。原创 2023-06-29 11:01:14 · 772 阅读 · 1 评论 -
十九、socket套接字编程(一)——UDP
socket API是一层抽象的网络编程接口 , 适用于各种底层网络协议 , 如 IPv4 、 IPv6, 以及后面要讲的 UNIX Domain Socket. 然而 , 各种网络协议的地址格式并不相同。struct sockaddr_ in——网络套接字,用于网络通信;struct sockaddr_ un——域间套接字,用于UNIX本地通信;IPv4和IPv6的地址格式定义在 netinet/in.h 中,IPv4地址用 sockaddr_in 结构体表示,包括16位地址类型,原创 2023-06-25 15:20:44 · 629 阅读 · 1 评论 -
十八、网络基础(一)
我们在网络通信的时候,不止是让两台主机通信。实际上,在进行通信的时候,不仅仅要考虑两台主机间互相交互数据。本质上讲,进行数据交互的时候是用户和用户在进行交互。用户的身份,通常是用程序体现的。程序一定是在运行中——进程!主机间在通信的本质是:在各自的主机上的两个进程在互相交互数据!IP地址可以完成主机和主机的通信,而主机上各自的通信进程,才是发送和接受数据的一方!IP :确保主机的唯一性端口号(port):确保该主机上某一个进程的唯一性(则一个进程只能占用一个端口号)原创 2023-06-22 17:35:12 · 1481 阅读 · 0 评论 -
AddFour、SingleRingQueue_code
说明:本code为单生产者,单消费者环形队列模型!原创 2023-06-04 12:08:43 · 36 阅读 · 0 评论 -
十七、多线程(下)
此时上锁后被挂起,生产者和消费者用的同一把锁,如果 生产者/消费者 不释放锁(解锁)那么对方的线程就永远无法访问,所以条件变量的wait中需要传入锁的意义是:在阻塞线程的时候,会自动释放mutex_锁(解锁)条件(对应的共享资源的状态,程序员要判断资源是否满足自己操作的要求,为满/为空就不满足),条件变量(条件满足或者不满足的时候,进行wait或signal–种方式)。如果是 if (isFull()) 则返回失败/伪唤醒后 就直接向下指向条件满足的代码,可是此时阻塞队列还是满的,再添加数据就错了;原创 2023-06-01 21:12:55 · 651 阅读 · 0 评论 -
十六、多线程(中)
此时线程B挂起,该线程A继续执行,线程A会把自己上下文数据恢复到%al中,此时%al=1,该执行判断了——>因为%al是1,就返回。情况2:或者在抢最后一张时,线程A先抢最后一张票,if (tickets > 0)为真,进入if语句,此时A的时间片到了就被切走了,开始执行线程B了;线程B也抢票,直接抢了9950张,还剩50张,此时B的时间片到了,又切回线程A,又把9999写入内存,就错误了。,因为线程安全指的是当前线程中对各项操作时安全的,但不表示内部调用的函数是安全的,两个之间并没有必然关系。原创 2023-05-30 20:46:40 · 825 阅读 · 2 评论 -
AddOne、线程类以及代码
【代码】附、线程类以及代码。原创 2023-05-31 15:48:48 · 60 阅读 · 0 评论 -
十五、多线程(上)
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是"一个进程内部的控制序列"。一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流一般在Linux教材里面线程是这样定义的:线程:是在进程内部运行的一个执行分支(执行流),属于进程的一部分,粒度要比进程更加细和轻量化。原创 2023-05-29 21:46:29 · 1258 阅读 · 1 评论 -
十四、进程信号
信号是进程之间事件异步通知的一种方式,属于软中断。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c ,会通过信号机制停止一个前台进程。信号和信号量不一样类似于老婆和老婆饼Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像 Ctrl-C 这种控制键产生的信号。原创 2023-05-22 14:23:51 · 747 阅读 · 1 评论 -
AddTwo、 processPool_code
【代码】AddTwo、 processPool_code。原创 2023-06-10 11:46:24 · 65 阅读 · 0 评论 -
十三、临界资源,临界区
叫做。(管道和共享内存都叫,只是管道是安全的,共享内存是不安全的)如果没有对临界资源进行任何保护,对于临界资源的访问,双方进程在进行访问的时候,就都是乱序的,可能会因为读写交叉而导致的各种乱码,废弃数据,等访问控制方面的问题。(例如父子进程的任意printf,因为显示器就是父子进程的临界资源)。原创 2023-06-12 15:14:33 · 908 阅读 · 1 评论 -
十二、进程间通信——共享内存
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。共享内存是一种用于实现进程间通信(IPC)的方法,不同进程通过访问同一块内存区域实现数据共享和交互。每个进程可以将自身的虚拟地址映射到物理内存中的特定区域,当不同进程将相同的物理内存区域与各自的虚拟地址空间关联时,这些进程就能实现通过共享内存来完成IPC。若某进程更改了共享内存区的内容,其它进程都会觉察到该区域的更改。原创 2023-05-09 19:48:13 · 1952 阅读 · 0 评论 -
十一、进程间通信——管道
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括匿名管道和命名管道)、消息队列、信号量、共享内存等。进程间通信的本质就是,让不同的进程看到同一份资源。由于各个运行进程之间具有独立性,这个独立性主要体现在数据层面,而代码逻辑层面可以私有也可以公有(例如父子进程),因此各个进程之间要实现通信是非常困难的。原创 2023-06-09 16:16:11 · 1531 阅读 · 1 评论 -
十、文件系统
但是硬连接的话,相当于镜像的方式,你创建一个目录的硬连接之后,操作系统需要把这个目录下所有的文件都要做一次硬连接(复制一份过去),这样操作系统在访问这个链接的时候要不断去遍历,大大增加复杂度,而且很容易进入死循环。根据文件属性,输入命令ll,第一个字母是l的是链接文件,并且是软链接文件,如果没有表示就是硬链接文件或者普通文件。硬链接实际上是文件的一个别名,硬链接指向的内容和原文件名所指向的是同一片硬盘空间软硬链接的理解。中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件。原创 2023-04-23 19:25:45 · 81 阅读 · 1 评论 -
九、文件io
每个进程都有一个指针*files, 指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针!文件描述符的分配规则:在files_struct数组当中,找到当前没有被使用的最小的一个下标,作为新的文件描述符。->操作系统为了管理对应的打开文件,必定要为文件创建对应的内核数据结构表示文件。所以,可以认为,f#系列的函数,都是对系统调用的封装,方便二次开发。所以我们的文件分为打开的文件和没有被打开的文件。文件的路径和文件名决定了文件的唯一性。原创 2023-04-19 21:31:13 · 202 阅读 · 0 评论 -
八、进程程序替换
说到环境变量之前我们先来看一下这个问题,我们刚刚提到过,进程替换可以让我们执行其他语言写的程序,那么我们怎么来执行呢?命令行怎么写(ls -l -a), 这个参数就怎么填"ls",“-l”,“-a”,最后必须是NULL,标识参数传递完毕[如何执行程序的]带e的都是可以传环境变量的(execle,execvpe)但是会覆盖系统原有的环境变量,把自己传的环境变量交给进程;子进程执行的是父进程的代码片段,如果我们想让创建出来的子进程,执行全新的程序呢?因为进程一旦替换成功,是将当前进程的代码和数据全部替换了!原创 2023-06-07 15:40:11 · 686 阅读 · 0 评论 -
七、进程等待
其实就相当于在捕捉一个子进程退出的时候,阻塞则会一直等待,直到这个子进程退出,返回对应的值。而非阻塞,如果刚好捕捉到子进程的退出则直接输出,如果没有捕捉到,也不进行等待,直接输出报错!如果没有捕捉到,也不进行等待,直接输出报错!原创 2023-06-06 20:38:22 · 604 阅读 · 0 评论 -
六、进程地址空间
环境变量(environment variables):系统当中用做特殊用途的系统变量。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。子进程默认会复制拥有与父进程相同的环境变量。原创 2023-06-05 18:00:03 · 889 阅读 · 0 评论 -
附、进程地址空间的一些概念
进程地址空间原创 2023-03-01 16:34:30 · 754 阅读 · 0 评论 -
五、进程相关
进程相关原创 2023-03-01 11:03:08 · 76 阅读 · 0 评论 -
四、操作系统理解
操作系统理解原创 2022-12-21 11:05:25 · 81 阅读 · 0 评论 -
三、冯 • 诺依曼体系
冯诺伊曼体系结构理解原创 2022-12-21 10:05:07 · 77 阅读 · 0 评论 -
二、Linux入门|yum&vim
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了,于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 “App” 和 "应用商店"这样的关系.原创 2023-05-10 15:58:38 · 1142 阅读 · 1 评论 -
一、Linux入门| shell运行原理及Linux权限的理解
shell运行原理以及linux权限的理解原创 2022-12-18 10:54:52 · 184 阅读 · 0 评论