Linux
文章平均质量分 97
坚持就是胜利!!!
路飞雪吖~
一分耕耘一分收获,保持热爱(^v^)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux】线程创建&&等待&&终止&&分离
✨POSIX线程库• 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的;• 要使用这些函数库,要通过引入头文件<pthread.h>;• 链接这些线程函数库时要使用编译器命令的 "-lpthread" 选项;✨创建线程在Linux内核中,没有线程的概念【没有单独设计tcb,只有进程pcb】!只有LWP,轻量级进程的概念,线程是使用LWP模拟的!这就意味着,Linux操作系统,不会给我们提供线程接口,只会提供创建轻量级进程的接口!原创 2025-07-15 22:00:00 · 188 阅读 · 0 评论 -
【Linux】线程概念 && 分页式存储 && 优缺点
• 物理内存是以4KB为单位进行管理的,一个页表的容量根本不能把所有的物理内存放下,所以我们把页表进行拆分,页目录【1024项,每个页目录里面指向的是页表,页目录里面的内容为页目录表项】,页表【页表里面的内容为页表项】;• 拆成多个页表有什么用呢?我们有1024张页表,我们每一个所对应的页表的大小都是1024byte,页表里面的页表项占4byte,所以整个页表最大变成了 1024 * 1024 * 4 = 4MB,内存管理的基本单位是4KB,所以页表项里只要指向物理内存特定4KB的起始地址就可以了,这样原创 2025-06-21 19:30:00 · 789 阅读 · 0 评论 -
【Linux】可重入函数 && volatile && SIGHLD信号
• main函数调用insert函数向⼀个链表head中插⼊节点node1,插入操作分为两步,刚做完第⼀步的时候,因为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换到 sighandler函数,sighandler也调用insert函数向同一个链表head中插入节点node2,插⼊操作的两步都做完之后从sighandler返回内核态,再次回到用户态就从main函数调用的insert函数中继续往下执行,先前做第⼀步之后被打断,现在继续做完第⼆步。结果是,main函数和sighandle原创 2025-06-05 19:00:00 · 1053 阅读 · 0 评论 -
【Linux】进程 信号保存 && 信号处理 && OS用户态/内核态
1. OS有巨大的 中断向量表,在开机的时候 从外设 直接 拷贝到 内存 当中了,包括 系统调用表【函数方法】和 各种异常处理方法 和 OS 内的各种数据结构,2. OS --- 其中 OS 内 不管是 系统调用、各种异常处理方法、打开文件、调度进程... 本质都是 通过系统调用方法 去访问 OS 里面的各种数据结构,把数据结构的操作方法 以函数的方式 提供出来,最后把 所有函数包装成 系统调用,让外部就能以硬件或软件中断的方式去调用。3. Linux 操作系统 让 每一个进程 都有自己的原创 2025-06-04 22:08:54 · 1081 阅读 · 2 评论 -
【Linux】进程 信号的产生
• 键盘上的组合键 是先被OS系统识别到【OS是键盘真正的管理者,当系统在运行的时候,OS一直在检测键盘上有没有信息】再发给进程,当进程不能立即处理这个信号时,进程就会记录下这个信号【信号是从 1-31 连续的数字,进程是否收到1-31这个数字的信号 --- 在 task_struct 里通过位图记录 0000 0000 0000 0000 0000 0000 0000 0000,比特位的位置:信号的编号,比特位的内容:是否为0/1,是否收到对应的信号】,发送信号的本质是什么?【写入信号】OS修改目标进原创 2025-05-25 19:30:00 · 1753 阅读 · 0 评论 -
【Linux】了解 消息队列 && system V信号量 && IPC原理
操作系统内部提供一个队列queue,操作系统里面的数据和相关的数据结构,是可以被所有进程共享的,两个进程【进程A,进程B】,操作系统给这两个将要通信的进程提供一个队列【在操作系统维护的队列】和数据块【struct data】,用户上层定义一个struct data的对象,进程A 想发给 进程B,把 struct data的对象 通过系统调用,把这个对象放入到操作系统的队列当中,这个队列进程A和进程B都能看到,进程A向这个queue里放节点,进程B就可以从queue里面拿节点 ---- 消息队列。进程B也可以原创 2025-05-21 19:54:39 · 1022 阅读 · 0 评论 -
【Linux】共享内存
本文详细介绍了共享内存的概念、实现方式及其在进程间通信中的应用。共享内存通过系统调用shmget创建,并使用shmat将其映射到进程的虚拟地址空间,从而实现多个进程访问同一块物理内存。文章还探讨了共享内存的管理指令(如ipcs和ipcrm)以及相关函数(如shmctl和shmdt)的使用方法。共享内存的优点是通信速度快,但缺乏保护机制,需通过信号量等方式进行同步。最后,文章通过代码示例展示了如何在客户端和服务器端使用共享内存进行通信,并提供了Makefile和头文件的实现细节。原创 2025-05-17 19:17:30 · 903 阅读 · 0 评论 -
【Linux】静态库 && 动态库
动静态也是文件也有自己的inode编号,在执行程序./main,程序加载到内存里面【二进制】,内存 ---页表 --- 进程 形成映射关系,可执行程序知道自己依赖哪些库,动态库也会加载到内存里面,新加载的库 --- 页表 --- 进程 形成映射,映射到进程的虚拟地址空间的共享区,当代码在编译时,需要调库就直接跳转到共享区执行所对应的方法,执行完再返回正文代码中,因此整个进程执行库方法,全都是在自己的地址空间中跳转运行的。【将当前所在的库路径添加到环境变量列表当中】库是写好的现有的,成熟的,可以复⽤的代码。原创 2025-04-22 20:00:00 · 918 阅读 · 0 评论 -
【Linux】进程通信 && 管道
每一个进程都有自己对应的文件描述符表,【struct files_struct 进程和文件所对应的映射关系,严格来讲属于偏进程方面的,若要创建子进程就要创建它】里面有一个数组【fd_array[]】数组对应都有自己的下标,在进程的内部有指针指向自己的文件描述符表,当进程打开磁盘文件【文件 = 内容 + 属性】,找到inode和文件的映射关系,在内核当中就可以创建一个所对应的内核数据结构【struct file 】,里面包含有文件相关的属性集【inode 和 文件内核缓冲区】,文件的属性就可以放到inode里原创 2025-05-13 21:58:13 · 985 阅读 · 0 评论 -
【Linux】文件系统 && 软硬连接
首先要确定在哪一个组里面,操作系统由文件系统自动来进行确定, 遍历GDT去找,根据要新增文件的基本信息【新增文件的大小、文件名称、...】找到了对应的一个组,其中就要分配inode号,首先查位图,找到一个局部性的值【偏移量】,把inode Bitmap、Block Bitmap。原创 2025-04-17 22:00:00 · 927 阅读 · 0 评论 -
【Linux】文件 && 文件描述符fd
一、C文件接口一、C文件接口🌟写文件🌠小贴士:• 文件 = 内容 +属性• 访问文件之前,都必须先打开它!【把文件加载到内存当中】文件没有被打开的时候,是在磁盘上的,我们在访问文件的时候,是谁在访问?写完的代码只是一个文本,并没有打开,代码编译成可执行程序【二进制】,也不是打开文件,当程序运行时,执行到fopen,并执行成功,才算是文件被打开。fopen属于运行时操作,当程序跑起来的时候,执行完fopen,对应的文件才会被打开。即访问一个文件,实则是进程在访问!• 文件必须加载到内存中!原创 2025-01-10 11:12:40 · 1077 阅读 · 0 评论 -
【Linux】编写简易shell && 深度理解命令行解释器 && 环境变量 && 内建命令
1、在命令行中,一个命令是如何执行的?对于普通命令来讲,就是解析命令行,然后通过exec*系列的函数接口,进行fork()程序替换。2、命令行参数是从命令行依次获取的,被shell自己解析自己维护。3、环境变量表是从系统的配置文件读取出来的,由shell自己维护,维护好就是一个全局的指针数组,通过 execvpe() 接口函数来调用,这个系统的调用接口把环境变量传递给所有的子进程。4、echo命令,是内建命令。原创 2024-12-26 21:32:41 · 1060 阅读 · 0 评论 -
【Linux】进程控制 && 程序替换
🌻返回值:当正常返回的时候waitpid返回收集到的子进程的进程ID;如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;🌻参数:pid• pid > 0:等待成功,目标为子进程的pid;• pid == 0:等待成功,但是子进程没有退出;• pid = -1:等待失败,等待任一个子进程。与wait等效。🌻status:•WIFEXITED原创 2024-12-21 20:43:09 · 920 阅读 · 0 评论 -
【Linux】环境变量 && 程序地址空间
🌻🌠命令行参数:我们使用的所有指令是用C语言或者是其他语言写的,指令中的选项是通过命令行参数来实现的,命令行参数列表使得同一个程序,可以根据命令行参数,根据选项的不同,表现出不同的功能。比如:指令中选项的实现!• main 函数的参数是谁传递的?这个字符串首先是被命令行解释器(shell)【进程】拿到的,shell 拿到之后,首先把上面的命令按照空格打散,形成一张表(argv)和元素个数(argc)。命令行启动的程序,父进程都是shell,所以命令和shell命令行是父子关系。原创 2024-12-15 21:30:00 · 935 阅读 · 0 评论 -
【Linux】gdb / cgdb 调试 + 进度条
所以为什么上面程序为什么会多出一个 “0” ,也就能理解了,以为从 10 开始我们输出的是 “1” “0” ,紧接着要输出 “9” 时,光标回车到了最开始,只覆盖住了 “1” ,“0” 一直都在,所以我们需要修改输出的格式 printf("%-2d\n",countt);我们思考一下,我们给显示器输出的是一个整数1234,还是打印了一个1 2 3 4 字符,让我们以为打印的是一个整数,我们需要知道的是,在平时我们都会以为这两个使用是一样的,其实不然,新起一行的本质:先回车,再换行。原创 2024-12-01 21:30:18 · 1194 阅读 · 0 评论 -
【Linux】进程
进程 = 内核数据结构(task_struct)+ 程序的代码和数据运行起来的程序,进程会被根据task_struct属性 被OS调度器调度,运行为什么要有PCB(task_struct)? OS要管理进程,先描述,再组织。task_struct 是Linux内核的一种数据结构,它会被操作系统在内存中进行创建,里面包含着进程相关的管理信息。原创 2024-12-06 21:30:19 · 806 阅读 · 0 评论 -
【Linux】权限
用户1 新建了一个文件,但是不想让 other 进行读/写,为此 用户1 把这些权限给关掉了,其他用户就不能对 用户1 建的文件进行读/写,但是其他用户可以对 用户1 建的文件进行删除!(文件的拥有者是当前用户)更改文件的读写执行权限,只会更改该文件本身,但要修改文件的拥有者、所属组时,普通用户以拥有者为例,本质是你要把这个文件给别人,给别人要经过别人的允许,若非要给,需用。一个文件被新建/删除/更改,并不取决于这个文件本身的读写执行权限,而是取决于这个文件所在的目录的权限;新建一个普通文件是664?原创 2024-11-22 21:09:36 · 969 阅读 · 0 评论 -
【Linux】vim
vim常见模式:•正常/普通/命令模式(Normal mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode•插入模式(Insert mode)只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。•末行模式(last line mode)文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即原创 2024-11-25 21:30:00 · 2505 阅读 · 0 评论 -
【Linux】基本指令
语法: ls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息-r 对目录反向排序-t 以时间排序-s 在l文件名后输出该文件原创 2024-11-21 22:00:00 · 1112 阅读 · 0 评论
分享