
Linux系统
文章平均质量分 95
Linux系统
GG_Bond21
关注回关,大家多多关照
展开
-
Linux环境基础开发工具的使用
对同一份源代码分别生成其release版本和debug版本的可执行程序,并通过ll指令可以看到,debug版本发布的可执行程序的大小比release版本发布的可执行程序的大小要大一点,其原因就是以debug版本发布的可执行程序当中包含了更多的调试信息。在每次重新生成可执行程序前,都应该将上一次生成可执行程序时生成的一系列文件进行清理,但每次都手动执行一系列指令进行清理工作的话,有些麻烦,因为每次清理时执行的都是相同的清理指令,所以可以将项目清理的指令也加入到Makefile文件中。原创 2023-10-25 21:22:21 · 340 阅读 · 2 评论 -
Shell运行原理以及Linux中的权限问题
Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面即"外壳程序"Linux严格意义上说是一个操作系统内核,被称为"核心(kernel)",但一般用户不能直接使用kernel,而是通过kernel的"外壳程序",即Shell,来与kernel沟通Shell即"原创 2023-07-14 09:38:59 · 718 阅读 · 0 评论 -
冯 • 诺依曼体系结构与操作系统
其实可以将将整个系统类比为一个银行系统进行理解。原创 2023-01-18 23:41:39 · 8253 阅读 · 16 评论 -
Linux下进程以及相关概念理解
当代码进行编译链接等操作后就会生成一个可执行程序,这个可执行程序本质上也是一个文件,存放在磁盘上。当使这个可执行程序运行起来,本质上是将这个程序加载到内存当中了,因为只有加载到内存后,CPU才能对其进行逐行的语句执行,而一旦将这个程序加载到内存后,我们就不应该将这个程序再叫做程序了,严格意义上将应该将其称之为进程原创 2023-01-22 13:26:11 · 8855 阅读 · 18 评论 -
Linux下进程控制详解
当进程结束后main函数的返回值实际就是该进程的进程退出码,可以使用echo $?命令查看最后一次退出的进程的退出码。为什么用0表示执行成功,用非0表示执行失败?代码执行成功只有一种情况,成功了就是成功了,而代码执行错误却有多种原因,例如内存空间不足、非法访问以及栈溢出等等,我们就可以用这些非0的数字分别表示代码执行错误的原因。退出码都有对应的字符串含义,而这些退出码具体代表什么含义是人为规定的,不同环境下相同的退出码的含义可能不同。原创 2023-01-25 15:50:30 · 10365 阅读 · 12 评论 -
基础IO详解
操作文件除了使用C语言、C++以及其他的语言的接口之外,还可以使用操作系统提供的接口。原创 2023-01-29 22:38:58 · 10772 阅读 · 8 评论 -
Linux动静态库
实际上,所有库本质是一些目标文件(xxx.o)的集合,库的文件当中并而只是包含了大量的方法以供调用,可以认为动静态库本质是可执行程序的"半成品".so.a.dll.lib下面通过一份简单的代码来具体认识一下动静态库通过可以查看可执行程序所依赖的库文件从上图可以看出test可执行程序依赖,但是其是一个软链接,链接的源文件为。这个实际上就是C动态库,去掉一个库前缀lib,再去掉后缀,剩下的就是库的名字。而gcc/g++默认进行的是动态链接,想使用静态链接需添加。原创 2023-01-31 22:24:53 · 5992 阅读 · 13 评论 -
Linux进程间通信
进程间通信简称(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。原创 2023-02-05 22:41:33 · 7069 阅读 · 14 评论 -
Linux进程信号
C/C++程序会崩溃,是因为程序当中出现的各种错误最终一定会在硬件层面上有所表现,进而会被操作系统识别到,然后操作系统就会发送相应的信号将当前的进程终止。原创 2023-02-11 09:00:00 · 7323 阅读 · 14 评论 -
任务管理与守护进程
进程组是一个或多个进程的集合,每个进程都属于一个进程组,引入进程组的目的是为了简化对进程的管理。每个进程组都可以有一个组长进程(由进程组第一个创建的进程担任),组长进程ID等于其进程组ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止通常,进程组与同一作业相关联,可以接收来自同一终端的各种信号只要在某个进程组中有一个进程存在,则该进程组就存在,与其组长进程是否终止无关。原创 2023-03-30 21:23:54 · 303 阅读 · 0 评论 -
Linux多线程
之前提到每个线程都有独占的栈,其中主线程采用的栈是进程地址空间中原生的栈,而其余线程采用的栈就是在共享区中开辟的。在Linux看来,描述线程的控制块和描述进程的控制块是类似的,因此Linux并没有重新为线程设计管理模块,而是直接复用了进程控制块,即Linux中的所有执行流都是轻量级进程。Linux系统中不提供真正的线程ID,只提供LWP,即操作系统只需通过LWP对轻量级进程进行管理,而供用户使用的线程接口等其他数据,由线程库来管理,因此管理线程时的"先描述,再组织"就应该在线程库中完成。原创 2023-02-13 09:30:00 · 8567 阅读 · 6 评论 -
线程互斥、同步
多线程执行流共享的资源叫做临界资源每个线程内部访问临界资源的代码,被称为临界区任何时刻,互斥保证有且只有一个执行流进入临界区访问临界资源,通常对临界资源起保护作用不会被任何调度机制打断的操作,该操作只有两态:要么完成,要么未完成下面模拟实现一个抢票系统,将记录票的剩余张数的变量定义为全局变量,主线程创建四个新线程进行抢票,当票被抢完后这四个线程自动退出//抢票所耗费的时间原创 2023-02-14 22:41:29 · 7317 阅读 · 6 评论 -
生产者消费者模型
对应到生产者消费者模型中,函数传参实际上就是生产者生产的过程,而执行函数体实际上就是消费者消费的过程,但生产者只负责生产数据,消费者只负责消费数据,在消费者消费期间生产者可以同时进行生产,因此生产者消费者模型本质是一种松耦合。消费者也不用找生产者索要数据,而是直接从这个容器中取数据。虽然消费者消费的快,但开始时阻塞队列中是没有数据的,因此消费者只能在empty条件变量下等待,直到生产者生产完一个数据后,消费者才会被唤醒进而进行消费,消费者消费完这一个数据后又会进行等待,因此生产者和消费者的步调就是一致的。原创 2023-02-15 17:16:39 · 8275 阅读 · 5 评论 -
理解与实现线程池
线程池是一种线程使用模式原创 2023-03-17 20:22:10 · 566 阅读 · 4 评论 -
Linux高级IO
什么是IO?I/O(input/output)即输入和输出,在冯诺依曼体系结构中,将数据从输入设备拷贝到内存就即输入,将数据从内存拷贝到输出设备就即输出OS如何得知外设中有数据可读取?输入就是操作系统将数据从外设拷贝到内存的过程,操作系统一定要通过某种方法得知特定外设上是否有数据就绪CPU不直接和外设交互指的是在数据层面上,而外设其实是可以直接将某些控制信号发送给CPU中的某些控制器的。OS如何处理从网卡中读取到的数据包?操作系统任何时刻都可能会收到大量的数据包,因此操作系统须将这些数据包管理起来。原创 2023-05-24 21:04:30 · 1261 阅读 · 2 评论 -
IO多路转接
select、poll、epoll是系统提供的多路转接接口原创 2023-05-26 15:32:48 · 1075 阅读 · 5 评论 -
Reactor模式
Reactor反应器模式,也被称为分发者模式或通知者模式,是一种将就绪事件派发给对应服务处理程序的事件设计模式。原创 2023-05-31 00:50:15 · 1867 阅读 · 1 评论