Linux
文章平均质量分 90
猪皮兄弟
C生万物,从0到1
展开
-
【项目设计】 负载均衡在线OJ系统
我们选择在线oj系统项目的原因是因为它可以帮助我们提高编程能力和解决问题的能力,同时也可以帮助我们更好地适应工作和学习中的编程需求。在线oj系统具有丰富的题库和实时反馈功能,可以帮助我们更好地进行编程练习和测试。 此外,负载均衡在线oj系统还可以进行项目的扩展,具有方便的使用和活跃的社区互动等优势,可以提高我们的学习效果和团队协作能力。原创 2023-05-16 18:37:37 · 2056 阅读 · 1 评论 -
Linux线程同步
比如去买手机,连续三十天,我每天都去问有货吗,售货员说没有,第三十天我去的时候才有,这虽然没有错,但是不合理,十分的浪费资源和降低效率。而且如果票卖完了,线程需要等待放票,那么只有互斥的话就一直去申请锁,一直做无用功,没错但不合理原创 2023-02-06 17:02:06 · 479 阅读 · 0 评论 -
Linux线程互斥
临界资源:多线程执行流共享的资源就叫做临界资源,在一个资源被多个执行流共享的情况下,我们通过一定的方式,任何时候只允许一个执行流访问的资源称为临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时候,互斥保证只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用(对临界资源保护)原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么不做必须通过代码层面来进行对临界资源的保护,有一种保护手段就叫做互斥,我们可以通过加锁原创 2023-02-05 22:37:35 · 332 阅读 · 0 评论 -
Linux线程控制
对于线程分离,主线程可以不用等这个新线程了,那是不是可以主线程直接走了呢?①主线程退出就意味着进程退出,那么所有执行流都会终止,有可能这个分离的线程还有事要干②无论在多进程还是多线程场景下,都应该主进程或者主线程最后退出,因为它不仅仅要担任创建,还有资源回收的职责③对于服务器来说,主线程或者主进程都是不退出的,所以怎么用还得取决于场景④不要乱用原创 2023-02-05 16:40:15 · 371 阅读 · 0 评论 -
Linux线程理解
在Windows当中,就有真正的线程系统中存在大量进程,就意味着存在大量的线程如果创建特定的数据结构,这个结构中的代码,逻辑等等,其中有相当一部分是非常类似的,所以如果想Windows这样单独设计,那么很多工作是重复的所以Linux决定,没必要在内核层面区分进程和线程,所有进程和线程都通过task_struct来统一表示,只不过进程有独立的地址空间,线程共享地址空间原创 2023-02-04 18:07:07 · 505 阅读 · 0 评论 -
IPC进程间通信-system V 共享内存
先回顾一下动态库,动态库是运行时库,在运行时才进行加载,而在使用动态库的地方保存的是偏移量,动态库加载后,各个使用动态库的程序都会根据加载的起始地址计算出使用到的函数和变量的地址。这些都在地址空间的共享区建立了映射,一个动态库可以被多个程序使用,所以也叫共享库。那操作系统自己申请了一部分空间,将这一部分空间,通过页表,映射到申请的空间,然后页表返回这一部分空间的起始地址,那上层就拿到了这样一个虚拟地址,同样的,可以映射给另一个进程,这样就可以同时访问到这部分空间原创 2023-01-10 16:57:52 · 410 阅读 · 0 评论 -
IPC进程间通信-管道
进程的运行具有独立性,带来的直接结果就是进程间想要通信的话,提高了难度,进程间通信的本值就是让不同的进程==看到==同一份资源(内存空间),并且这一份资源不能属于任何一个进程(就算是写入缓冲区,另一个进程再去读,也是读不到的,因为写时拷贝)所谓的独立性,不是绝对的独立,而是大部分情况下,是独立的,该进程运行终止后,不会去引用其他进程原创 2023-01-10 10:21:38 · 285 阅读 · 1 评论 -
解决VSCode远程主机安装扩展太慢的问题,远程上传+vsix安装
解决VSCode远程主机安装扩展太慢的问题,远程上传+vsix安装原创 2022-12-15 20:39:10 · 518 阅读 · 0 评论 -
Linux软硬链接与动静态库
我们此时把testLink1.txt删掉,我们看到,hard.link仍然还在(inode还在,说明文件还在),那么此时说明只是把目录data blocks中testLink1.txt和inode的映射关系删掉了。(文件系统与inode中讲到)我们可以看到,有一个数字从2变成了1,这个数字就是硬链接数,硬链接数在inode中就是一个计数器,来记录有多少个文件名和这个inode有映射关系(引用计数),当我们删掉一个文件的时候,只是把硬链接数-1,(也就是删掉了一个映射),当硬链接数变为0的时候原创 2022-12-14 21:23:09 · 325 阅读 · 0 评论 -
Linux 磁盘结构,文件系统与inode
磁盘是一个外设(外设即冯诺依曼中承担输入输出角色的设备),而且,磁盘还是计算机中唯一一个机械设备,因为磁盘是外设,同时又是机械设备,就意味着磁盘会非常的慢(相对而言),所以OS一定会有提速的方式原创 2022-12-08 17:42:53 · 1052 阅读 · 0 评论 -
Linux重定向原理与系统调用dup2
因为文件类的接口都会去调用系统调用,因为对文件操作属于是文件管理,这部分内容是需要操作系统去完成的,因此在系统中,他是只认识fd这个数字的,并不知道FILE*这些,这些是上层封装出来的原创 2022-12-05 22:52:55 · 636 阅读 · 0 评论 -
Linux文件系统调用接口&&文件描述符的理解
①.系统调用对于我们来说是比较难的,因为我们需要系统要去干什么,需要传哪些参数,所以学习成本太高,所以语言层次,对系统调用接口进行了封装,导致了不同的语言,有不同的语言级别的文件访问接口封装出来的接口是有多个的,但是文件类的系统调用接口,在Linux上,只有一套②跨平台如果语言不提供对文件的系统封装接口,那么所有的访问文件操作,必须使用操作系统提供的系统调用接口,一旦这样,那编写的代码在其他平台就运行不了了,而我如果进行封装,不同的平台进行不同的封装,但是提供给用户的接口都是一样的,这样,就实现了原创 2022-12-03 21:45:19 · 239 阅读 · 0 评论 -
Linux实现一个简单的shell-进程控制
首先,不知道命令的位置,所以需要去PATH环境变量找,其次,g_argv已经有了命令分割出来的指针数组,所以综合看来选择execvpp表示环境变量,v可以看做需要传一个数组原创 2022-10-16 11:19:27 · 820 阅读 · 6 评论 -
Linux进程控制详解.
进程=内核数据结构+进程数据和代码1. 分配新的内存块和数据结构给子进程2. 将父进程部分数据和内容进行拷贝3. 添加子进程到系统进程列表4. fork()返回,开始调度器调度原创 2022-10-15 15:03:36 · 1180 阅读 · 3 评论 -
Linux进程地址空间.
我们发现,同一个地址,同时读取的时候出现了不同的值,这就告诉了我们,这里的地址绝对不是物理内存的地址,而是虚拟地址,所以,我们所说的地址,其实是虚拟地址原创 2022-10-14 08:00:00 · 391 阅读 · 0 评论 -
Linux进程优先级与环境变量初识
如果上下文数据丢弃,进程也就无法运行了(因为CPU内的寄存器只有一份(多个),当时间片到了,或者被抢占(暂时切换下来),进程A就要带着自己的上下文数据走,带走暂时保存的目的就是为了下次回来的时候能恢复上去,就能按照之前的逻辑继续向后推进,就如同没有中断过一样)原创 2022-09-29 09:00:00 · 1148 阅读 · 7 评论 -
Linux操作系统进程的状态详解.
并不意味着进程一定在运行中,表明在运行中或者在运行队列当中可以看到上图的状态一直在变化,因为CPU一直在做事情而且它太快了,printf需要访问外设,因为printf被执行了所以一定有运行状态,当进程向显示器打印的时候,需要做一定程度的等待,这时进程的PCB在阻塞队列当中,就绪时才又拿给CPU,这个过程特别快,所以,很多时候看到的都是S状态。原创 2022-09-28 09:00:00 · 510 阅读 · 3 评论 -
Linux中getpid、getppid与fork,创建子进程的过程和问题.
1.我们写的代码通过fork()系统调用接口让操作系统按父进程为模板复制一个子进程的PCB(Linux中是task_struct),几乎所有的字段都复制进来,但是也有私有的,比如PID2.子进程创建后,fork()以下的代码都是父子进程共享的,所以我们需要用分支语句来控制父子进程执行不同的行为3.每个CPU都会给自己维护一个运行队列run_queue,队列中就是进程控制块task_struct,所以进程进行的过程也就是挑选一个进程控制块来运行4.....原创 2022-09-27 09:00:00 · 1635 阅读 · 37 评论 -
进程入门与PCB基础知识.
1.标示符:描述本进程的唯一标示符,用于区别其他进程(其实是一个无符号整数)2.状态:任务状态,退出代码,退出信息等等3.优先级:相对于其他进程的优先级4.程序计数器PC:程序中即将被执行的下一条指令的地址5.内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针6.上下文数据:进程执行时处理器的寄存器中的数据 7.I/O状态信息:包括显示的I/O请求,分配给进程I/O设备和被进程使用的文件列表 8.记账信息:可能包括处理器的时间总和,使用的时钟原创 2022-09-26 08:00:00 · 473 阅读 · 1 评论 -
Linux调试器-gdb的使用
GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。原创 2022-09-24 10:00:00 · 539 阅读 · 0 评论 -
Linux环境开发工具的使用.
动态链接:将库中需要的实现方法的地址,填入我的可执行程序中,建立关联好处:节省资源坏处:非常依赖库文件,如果不存在或缺失,程序无法运行静态链接:将库中方法的实现,拷贝到可执行程序中好处:不再依赖库坏处:占用资源原创 2022-09-22 09:00:00 · 1388 阅读 · 1 评论 -
Linux权限详解.
Shell是一种外壳,命令行解释器将使用者的命令翻译给核心处理,同时,将核心的处理结果翻译给使用者 我们通过图形化界面和Linux当中的指令操作其实就是在用OS提供的外壳程序来访问OS的。如果让人直接访问操作系统a.操作成本特别高b.人会犯错,带来安全隐患所以,设计者不会让人直接操作OS外壳程序存在的价值和意义1.用户和操作系统交互的中间软件层2.可以在 一定程度上起到保护操作系统的作用**shell是对所有外壳程序的统称,bash外壳程序是shell外壳程序的一种原创 2022-09-18 21:09:55 · 736 阅读 · 3 评论 -
Linux常用命令(下).
什么是时间戳? 时间戳是字符或编码信息的序列,用于标识何时发生特定事件,通常给出日期和时间,有时精确到几分之一秒。并且时间戳是单调递增的,具有唯一性当我们在下载软件的时候,下下来的是一个安装包,因为提供软件的公司发布的产品要通过网络传输,为了不丢失,减少网络的消耗情况,下载更快,所以就有了将所有的软件打包和压缩这样的技术。原创 2022-09-15 19:33:39 · 1363 阅读 · 33 评论 -
Linux常用命令(上).
绝对路径与相对路径1.绝对路径:以根目录开始,一直到该文件所在为绝对路径,绝对路径日常中使用相对较少,一般绝对路径用在正式的场合,比如配置文件2.相对路径:不以根节点开始,而是以当前目录为参考点,这样定位文件的方式叫做相对路径原创 2022-09-13 20:56:59 · 600 阅读 · 18 评论