Linux操作系统
文章平均质量分 75
学习Linux操作系统,了解操作系统基础知识
Exy-
这个作者很懒,什么都没留下…
展开
-
Linux进程概念
进程概念进程简单点来说就是正在执行的程序,从内核看就是担当分配系统资源的实体。而程序则是一段有序指令的集合,根据冯诺依曼体系结构我们可以得到,程序员的代码存储在硬盘中,当其执行的时候代码会首先被加载到内存上面。当加载到内存上面时候,就需要操作系统对其进行描述与组织,也就是管理。而操作系统则是通过一个结构体对这个指令和数据进行描述然后组织,从而达到管理的目的。进程信息被放在PCB(进程控制块)中,Linux下的PCB其实是一个task_struct结构体;task_struct中的信息包括标示符原创 2022-03-20 20:04:11 · 226 阅读 · 0 评论 -
进程(Process)基础知识(孤儿,僵尸进程)
冯诺依曼体系:计算机硬件体系结构-五大硬件单元 输入,输出,运算器,存储器,控制器所有的设备都是围绕内存工作的(存储器在所有设备中完成的是数据中间缓冲作用操作系统:做管理的软件-对计算机上的软硬件资源进行管理,让计算机更加好用管理:描述+组织系统调用:操作系统提供给用户用于访问系统内核资源的接口库函数:大佬们针对典型场景功能对系统调用接口进行的封装库函数与系统调用接口的关系:上下级的调用关系.进程概念:在用户角度进程就是一个运行中的程序,但在操作系统的角度,进程是pcb-原创 2022-01-25 16:53:21 · 686 阅读 · 0 评论 -
多线程应用(线程池,单例模式)
线程池一堆线程进行任务处理,主要针对大量任务需要处理的场景,使用多执行流可以提高处理效率如果一个任务到来就创建一个线程来处理这有很大缺点:成本:总耗时=线程创建时间+任务处理时间+线程销毁时间,如果任务处理时间短,则大量时间被线程创建与销毁消耗了 风险:如果有大量线程进来,则在峰值压力下系统可能会有崩溃风险思想:线程池其实是一堆创建好的线程和一个任务队列,有任务来了就抛入线程池中,分配一个线程进行处理线程池中的线程与任务节点数量都有最大限制,避免资源消耗.实现:typedef原创 2022-02-03 20:59:33 · 532 阅读 · 1 评论 -
其他的锁#/(乐观锁,悲观锁,读写锁,自旋锁,CAS算法)
应用场景:读者—写者模型也就是读共享,写互斥的场景就比如,如果有多个线程和一个数据空间,而有的线程想要修改空间中的数据,有的只是想看一看有什么数据,这时候用互斥锁的话就只能串行进行,效率很低读锁:当前只要没有被加写锁写锁:既没有读,也没有写的时候才能加写锁实现:用两个计数器当加锁不成功时,则要阻塞进程/线程读写锁的阻塞是通过自旋锁来实现的自旋锁:一直占用cpu不释放,循环进行条件判断;适用于等待时间确定较短的场景...原创 2022-02-03 14:19:47 · 299 阅读 · 0 评论 -
Linux多线程理解---(线程安全(互斥锁,信号量,条件变量)#/)
线程安全概念多线程之间对同一个临界资源的访问操作是安全的,访问同一个临界资源可能会造成数据二义实现互斥:保证执行流在同一时间对临界资源的唯一访问,保证安全同步:通过一些判断实现对资源获取的合理序列操作互斥互斥锁本质:就是一个0/1的计数器,主要用于标记资源的访问状态;本身就是用来实现互斥,自己也就是一个临界资源.(同一个资源所有进程在访问的时候得加同一把锁)自身的安全---互斥锁是一个原子操作操作加锁(将状态置为不可访问状态)解锁(将状态置为可访问状态)一原创 2022-02-02 20:52:10 · 3172 阅读 · 0 评论 -
Linux多线程理解---(线程概念,线程控制)
线程概念:线程是进程中的一条执行流程原创 2022-02-01 19:27:57 · 1242 阅读 · 0 评论 -
Linux-信号(重入,volatile关键字)
信号概念:它是一种事件通知机制,通知进程发生了什么事件,打断当前进程的操作去处理这个事件种类:使用kill -l(查看linux信号种类)---62种非可靠信号/非实时信号: 1~31; 可靠信号/实时信号:34~64;信号生命周期产生产生方式:硬件中断ctrl +z(20)/c(2)/\(3)软件中断:int kill(pid_t pid,int sig)给指定进程发送指定信号int raise(int sig);给自己发送指定信号voidabort(void).原创 2022-01-31 16:36:28 · 956 阅读 · 0 评论 -
进程间通信(IPC)
进程间通信(IPC)操作系统为用户提供的几种用于进程间通信的方式(管道,共享内存,消息队列,信号量)目的:进程具有独立性(每个进程都有自己的虚拟地址空间,访问的都是自己的虚拟地址,其他进程在自己的虚拟地址空间映射中实际上是没有这个数据的),因此进程间无法直接通信,但是在大型项目中多个协同工作很常见,这时候进程间通信就尤为重要.进程间通信根据不同的实际应用场景来采用不同的方式.一.管道-PIPE半双工通信:管道有两端,但是数据从哪端到哪端这个由用户来定1.管道的分类1.1匿名管道内原创 2021-11-22 21:09:59 · 515 阅读 · 0 评论 -
基础IO—(Linux下的库函数和系统调用以及重定向和动态静态库)
标准库文件IO操作FILE* fopen(char *pathname,char *mode);//打开文件pathname:文件路径名; mode:文件的打开方式mode 含义 r 只读打开文件,文件必须存在 r+ 读写打开文件,文件必须存在 w 只写打开文件,文件不存在则自动创建,存在则清空内容 w+ 读写打开文件,文件不存在则自动创建,存在则清空内容 a 追加方式打开文件,文件不存在则自动创建,存在则数据总是写入到文原创 2022-01-29 15:12:04 · 1327 阅读 · 0 评论 -
进程控制(创建,终止,等待,程序替换)
进程创建pid_t fork()和pid_t vfork()进程本质上就是一个PCB,创建进程就相当于创建PCB;pid_t fork(void);pid_tvfork(void)功能:通过复制父进程创建一个新的进程(子进程)返回子进程id给父进程,对于子进程返回0,失败返回-1;pid_vfork(void) 特性:父子进程共用一个虚拟地址空间,父子进程数据共享任意一个进程对原有数据的修改都会影响到另一方,并且共用同一个栈,因此函数调用压得都是同一个栈,造成栈混乱,因此让子进程先.原创 2022-01-27 01:37:18 · 855 阅读 · 0 评论