
Linux
文章平均质量分 79
风间琉璃大师
这个作者很懒,什么都没留下…
展开
-
Linux锁的使用
一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数。多线程会共享例如全局变量等资源,我们把会被多个执行流访问的资源称为临界资源,我们是通过代码访问临界资源的,而我们访问临界资源的那部分代码称为临界区。3.如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生 死锁,因此是不可重入的。答案是会的,当一个线程申请完一个锁,访问完临界资源后,接下来该释放锁了,但是代码却写成了加锁,这就会导致死锁问题。原创 2024-04-08 19:44:44 · 1042 阅读 · 0 评论 -
Linux内存管理以及页表如何寻址
如果要扩大文件缓冲区,无非就是在内存中再申请一个数据块,把文件某部分内容加载到这个数据块中,再把数据块添加到文件缓冲区里。由于文件系统IO的基本单位大小是4KB,所以我们的可执行程序被划分为一块一块的4KB大小,分块被加载到内存,所以内存也要划分为一块一块的4KB空间。4GB的内存中有1048576个页框(4GB),OS怎么知道哪个页框已经使用、哪个还没使用、哪个正在刷新、是否需要释放?我们把IO的4KB大小称为page size,把可执行程序的一块4KB称为页帧,把内存中的一块4KB称为页框。原创 2024-04-07 14:29:06 · 381 阅读 · 0 评论 -
Linux线程实现方案
线程并不是越多效率越高,对于计算密集型,假设计算机有两个八核CPU,最好创建16个线程并发执行,如果只有一个单核CPU,一个线程的效率是最高的,因为多个线程还要切换上下文资源,降低效率。所以每个新线程的栈在库中维护,动态库一般被加载到共享区中,当我们创建一个线程时,pthread库在堆中new一段空间,把堆空间的地址写到库里面,在库里面用指针维护它,在线程运行用到的一些栈空间通过这个指针就可以找到了。线程间切换的时候,地址空间和页表这些是不用切换的,只需要切换一些运行中产生的临时数据相关的寄存器。原创 2024-04-07 14:25:30 · 947 阅读 · 0 评论 -
进程地址空间
当执行代码的时候,读取访问到一个虚拟地址,查页表发现对应的内存和代码都没有,此时OS会暂停访问请求,接着在内存中开辟空间,把可执行程序需要执行的对应虚拟地址的代码加载到内存里,把对应的物理地址填充到页表中,把标志位该为11,最后让暂停的代码继续访问。若子进程先进行修改就把子进程的页表映射关系修改为新的物理地址,此时子进程指向新的空间并修改新空间的数据。哪个进程先改,哪个进程修改页表。,当子进程想要修改共同指向的数据时,OS会现在物理内存中开辟一块空间,并把原来空间的值拷贝一份,这块空间有新的物理地址。原创 2024-03-25 15:50:19 · 395 阅读 · 0 评论 -
命令行参数与环境变量
实际上,在Linux中大部分的命令是在磁盘当中真正存在的,需要fork创建子进程来执行命令,但还有一种命令,不需要子进程,有bash自己进行执行,这种命令等同于bash内部的一个函数,这种命令我们称之为内建命令。执行shell自带的指令时,会有一个默认搜索路径,称为环境变量PATH,在这里可以找到指令。export命令也是内建命令,因为export不能创建子进程,如果创建子进程会导致把环境变量导入到子进程的环境变量中。系统中会存在大量的环境变量,每一个环境变量都有它自己的特殊用途,用来完成特定的系统功能。原创 2024-03-24 10:39:55 · 618 阅读 · 0 评论 -
Linux进程优先级
进程排队的本质就是确定优先级优先级是什么?得到某种资源的先后顺序。为什么要有优先级这个概念?本质上是因为资源不足。ps -l查看进程更详细的属性。Linux支持动态优先级调整,但不能直接修改PRI,要修改NI(nice值)间接修改PRI。原创 2024-03-23 09:38:57 · 362 阅读 · 0 评论 -
Linux进程的状态
进程状态在PCB里面也就是一个整型变量,int status。状态变化本质上是:(1)修改pcb中status的值(2)将pcb链入不同的队列中。原创 2024-03-22 22:17:19 · 301 阅读 · 0 评论 -
进程O(1)调度算法
一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个 比特位表示队列是否为空,这样,便可以大大提高查找效率。图中框起来的queue[140]代表着140个进程队列,其中下标为[0,99]为实时进程队列,[100,139]为普通进程队列。实时优先级,在运行队列中加入一个进程,这个进程必须一直运行到结束,一次调度运行完毕,适合需要快速响应的场景。3.当活动队列的进程时间片跑完后,与过期队列交换内容,获得一批新的活动进程。2.过期队列上放置的进程,都是时间片耗尽的进程。原创 2024-03-23 14:31:20 · 454 阅读 · 0 评论 -
Linux进程简单介绍
我们可以同时启动多个进程,所以内存中一定会加载多个程序,有多个程序,操作系统就要把它们管理起来。首先要有一个struct结构体,里面要存储进程的属性等(这就是描述),再通过链表将多个PCB组织管理起来(这是组织)。如果某个进程想退出,操作系统可以通过PCB找到可执行程序的代码和数据并释放掉,再把进程的PCB从链表中删掉,操作系统就不再管理这个进程了。CPU在执行进程时,并不直接访问可执行程序,而是找到对应进程的PCB,根据PCB找到可执行程序的代码和数据,交给CPU。进程是运行起来的程序?原创 2024-03-22 09:07:48 · 262 阅读 · 0 评论