- 博客(21)
- 收藏
- 关注
原创 Linux:多线程---初识线程
本文摘要:Linux系统通过轻量级进程实现多线程机制,线程是进程内的执行分支,共享同一地址空间资源。Linux内核未明确定义线程,而是复用进程数据结构(task_struct)进行模拟。线程相比进程具有轻量化优势(创建/切换成本低),但也存在健壮性降低等缺点。线程共享进程数据,但拥有独立栈和上下文。文章详细解析了虚拟地址转换机制,并介绍了pthread线程库的使用方法(如pthread_create),强调Linux中线程本质是轻量级进程(LWP)。最后总结了线程的应用场景:提升CPU密集型程序效率和改善I
2025-05-26 10:57:21
1158
42
原创 Linux:再谈进程地址空间
本章深入探讨了进程地址空间的相关内容。首先分析了程序编译后的逻辑地址与加载到内存后的虚拟地址转换机制,解释了动态库采用相对编址(-fPIC)的原因。其次从信号处理角度阐述了用户页表和内核页表的区别,指出内核空间对所有进程是共享的。最后通过32位地址转换示例,详细说明了虚拟地址到物理地址的映射过程,并指出线程资源分配本质上是地址空间范围的划分。这些内容从不同维度完善了对进程地址空间的理解。
2025-05-24 13:08:27
1522
47
原创 Linux:进程信号---信号的保存与处理
本章深入探讨了信号的保存与处理机制,重点介绍了信号的状态管理、用户态与内核态的转换、信号处理的底层逻辑以及可重入函数的概念。信号的状态分为未决、递达和阻塞,内核通过位图管理信号的接收与处理。信号的处理通常发生在进程从内核态返回用户态时,操作系统会在内核态与用户态之间进行切换,确保信号的安全处理。此外,信号的处理可能涉及用户自定义函数,内核会在执行这些函数时进行状态转换。可重入函数的设计确保了在信号处理过程中不会出现数据竞争或状态不一致的问题。通过理解这些机制,可以更好地掌握信号处理的底层原理,提升程序的稳定
2025-05-21 13:59:55
1328
46
原创 Linux:进程信号---信号的概念与产生
本文介绍了进程信号的基本概念及其产生方式。信号是操作系统与进程之间的一种通信机制,常见的信号包括键盘组合键(如Ctrl+c)、kill命令、系统调用(如kill、raise、abort函数)、硬件异常和软件条件等。文章从硬件角度解释了信号的识别过程,特别是键盘输入如何通过硬件中断转化为信号。此外,还介绍了core dump功能,它能够在进程异常时将内存信息转储到磁盘,便于事后调试。通过本文,读者可以初步了解信号的作用、产生方式及其在操作系统中的处理机制。
2025-05-20 17:35:17
1380
45
原创 Linux:进程间通信---消息队列&&信号量
本章深入探讨了System V进程间通信的两种方式:消息队列和信号量。消息队列通过允许不同进程向内核发送带类型的数据块实现通信,其系统接口包括创建、修改、发送和接收数据等功能。信号量则是一个计数器,用于管理对共享资源的访问,确保资源的互斥使用。本章还讨论了进程间通信的内核数据结构设计,包括IPC资源的管理机制。最后,本章强调了信号量在进程间通信中的重要性,尽管它不直接传输数据,但通过资源管理实现进程间的协同。
2025-05-10 13:48:28
2023
74
原创 Linux:进程间通信---命名管道&&共享内存
类似于与open中的位图参数,表示,如何创建,如何获取概念。是一个共享内存标识符(该返回值和文件描述符并不能类比)是创建的共享内存的大小(问题一),单位是字节。
2025-05-06 16:36:45
1857
33
原创 Linux:进程间通信---匿名管道
进程间通信:两个或者多个进程实现数据层面的交互,因为进程独立性的存在,导致进程通信的成本比较高。本篇文章从进程间通信的定义出发,由浅入深,从理论到原理解析,从解析到实例分析,最后再到运用的场景,我们不仅知道了进程间通信的本质就是不同进程间看到同一份资源,还知道了管道的系统调用和管道的使用,通过总结四种情况和五中特征的方式了解深入了解了管道的使用情况!!!
2025-04-25 17:50:21
4482
44
原创 Linux:基础IO---动静态库
动态库和静态库动态库因为是共享库,能有效节省资源(磁盘空间、内存空间、网络空间)【优点】,动态库一但缺失,会导致很多程序无法进行【缺点】静态库,不依赖于库,程序可以独立运行【优点】,体积大,比较消耗资源【缺点】,如果非要静态连接,可以加-static。
2025-04-19 16:59:30
4079
38
原创 Linux:基础IO---软硬链接&&动静态库前置知识
想要知道什么是软硬链接,我们先看软硬链接是如何创建的!建立硬链接:ln + [文件名]建立软连接: ln -s + [文件名]创建软连接后,我们发现他具有独立的inode,与被其链接的文件的inode和软连接的inode不一样。所以,软连接是一个独立的文件,因为他具有独立的inode创建硬链接后,该硬链接的inode与被其链接的文件的inode一样。所以,硬链接不是一个独立的文件,因为他没有独立的inode。
2025-04-13 17:33:20
1496
31
原创 Linux:基础IO---inode
当我们要删除一个文件时,操作系统会拿到该文件的inode去找他inode Table中对应的属性,通过属性中存放数据的数据块的下标,将对应的Block Bitmap的位置置“0”,然后在将该inode对应inode Bitmap的位置置“0”,就将该文件删除了,数据块中的内容不用去删除,很麻烦,效率也不高。当我们要查找一个文件,就要通过他的inode找到他在inode Table中对应的属性,从而找到该文件的相关内容,查找该文件的内容,就去访问该文件的数据块,查找该文件的权限,就去访问该文件的权限等**
2025-04-06 20:13:22
1181
15
原创 Linux:基础IO---缓冲区
通过上面五个实例,我们知道了一件事,C语言调用的接口和系统调用的接口区别很大,C语言调用的接口如果没有及时刷新缓冲区就会被close刷掉,或者被拷贝到子进程中,而系统调用的接口则不同,没有被close刷掉,而且是立即打印,没有被子进程拷贝!!!调用C语言接口进行的打印,要先放到缓冲区中,这个缓冲区一定不在操作系统内部!!!不是操作系统级别的缓冲区!!!C语言他会给我们提供一个缓冲区,C接口的调用都会放在该用户级的缓冲区中。
2025-03-28 15:28:54
902
12
原创 Linux:基础IO---文件描述符
文件分为程序文件和数据文件文件名 == 文件路径+文件名主干+文件后缀数据文件:文本文件二进制文件流:我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对文件、画面、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。
2025-03-22 20:58:06
812
11
原创 Linux:深入了解进程---进程控制(进程替换&&自制简易版shell)
1.2 进程替换的原理1.3 多进程版------验证各种程序替换接口其中的test.cpp的内容如下:(其中该代码编译后的可执行文件为test)2.自制简易版shell—myshell2.1 交互问题,如何获取命令行?2.2 子串分割问题,解析命令行2.3 strtok()函数2.4 普通命令的执行2.5 指令的判断(内建命令和普通命令)&&内建命令的特殊处理1. 内建命令:cd2. 内建命令:export3. 内建命令:echo4. ls的特殊处理总结
2025-03-15 21:08:24
972
10
原创 Linux:深入了解进程---进程地址空间
对于一个程序,我们要知道该程序的一些变量都存储在哪里!如图,我们知道一个程序中有一个空间,用来存放不同的变量,其中有栈区、堆区、全局数据区、字符常量区和代码区。(其中,栈空间变量地址向下增长,堆空间变量地址向上增长)
2025-03-01 20:18:02
887
4
原创 Linux:进程优先级和进程切换
本篇文章讲述了我对进程优先级了解,从并发入手,用运行时每个进程的时间片和进程切换所结合的轮转调度算法来讲解了寄存器对进程切换的作用,以及进程切换的内容。提高效率,进程的高频数据会放入寄存器中,cpu内的寄存器里面保存的是。现在让我徐徐道来其中的几个名称的含义是什么!cpu资源分配的先后顺序。
2025-02-22 21:26:33
708
6
原创 Linux:进程的状态
并发执行的程序在执行过程中分配和管理资源的基本单位。[2]一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。对于不同状态下的进程,操作系统会进行区分对待,从而更好的管理进程!!!
2025-02-08 08:00:00
961
4
原创 Linux:进程与冯诺依曼体系结构
输入设备和输出设备与CPU直接交换数据,假设输入设备和输出设备的数据处理速度是微妙级别,CPU的数据处理速度是纳秒级别,期间差了10的6次方,输入设备输入花很长时间才能输入的数据,CPU一下子就搞定了,这会导致CPU的利用率非常低,为了解决这样的问题,中间加一个存储器,就可以减缓这样的情况。但是我们知道,我们平时很少见到校长的,于是就有了一个问题,校长是怎么对我们进行管理的?这是因为校长要管理我们,其实只要管理我们的数据就行,比如对我们的绩点,处分情况,学号等进行管理就可以达到管理学生的目的。
2025-01-18 14:23:52
1148
5
原创 有趣的扫雷小游戏
首先,我们要想到一个问题一般游戏中,当我们点击了某个无雷的方格时,方格内会显现出其周围一圈的雷的数量,,按照雷的位置是1,无雷的位置是0,这时我们只要将该格子周围的雷的数量都加起来,就可以得到该格子一圈内的雷的数量,那么问题来了,如果,我先去[0][0]这个位置呢?话说,距离本人写博客已经过去近两月了,并非是我偷懒了(虽然还是有点懒),其实是去巩固自身的学识更新自己的技术,使我写出的文章充满干货,让读者多学到东西,OK,废话不多说,让我开始介绍今天的扫雷游戏吧!首先,咱们要确定正方形的大小,即格子的多少。
2024-04-06 17:06:21
494
13
原创 我的第一篇文章
一开始我对计算机的理解仅仅停留在游戏,软件等一类的东西,比如米哈游,网易,腾讯等公司,但随着我对计算机的了解,我逐渐知道我所知晓的东西还是太片面了,于是我更加知晓学习的重要性,在这片领域,编码能力、学习能力都是很重要的东西,归根结底,积累很重要,我每天一般会用到5到6小时来打磨我的编程能力以及学习相关知识,从开始接触到c语言到现在学习数据结构,我也是这样做的,这样的坚持让我的编程能力有了极大的进步,而这样的编程能力又成为了我学习的动力,我希望自己能坚持下去。1.自我介绍和写文章的原因。
2024-01-31 16:28:55
193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人