点赞再看,养成习惯,微信搜索【三更极客】关注这个混迹于互联网圈的技术人。
掌握操作系统与Linux相关知识,对服务问题的排查非常重要,实际找工作中,因为各个公司的侧重点都不一样,考察的知识也不一样,但是作为从事相关计算机工作的,计算机操作系统与Linux相关的知识点还是需要掌握的。根据工作常用的知识,本文整理了所需要重点了解的几大知识点。
关于知识点,我就不唠唠,直接上图⬇️
什么是死锁?
在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。
产生死锁的原因?
1.系统资源不足;
2.进程推进顺序非法。
产生死锁的必要条件:
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
怎样避免死锁?
在并发程序中,避免了逻辑中出现复数个线程互相持有对方线程所需要的独占锁的的情况,就可以避免死锁。
高效快速的管理内存,在适当的时候回收和释放内存资源
虚拟地址先经过分段机制映射到线性地址,然后线性地址通过分页机制映射到物理地址。
FIFO算法
先入先出,即淘汰最早调入的页面。
OPT(MIN)算法
选未来最远将使用的页淘汰,是一种最优的方案,可以证明缺页数最小。
可惜,MIN需要知道将来发生的事,只能在理论中存在,实际不可应用。
LRU(Least-Recently-Used)算法
用过去的历史预测将来,选最近最长时间没有使用的页淘汰(也称最近最少使用)。
LRU准确实现:计数器法,页码栈法。
由于代价较高,通常不使用准确实现,而是采用近似实现,例如Clock算法。
进程是具有独立功能程序在某个数据集合上的一次执行过程。
线程是进程内的一个执行实体或执行单元。
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
管道在Shell中的使用很常见。如简单的统计:cat xxx | sort | uniq -c | sort -rg | less
。
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
后端开发中,我们常用到的各种消息队列,就是这个道理。
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
开发中用到的各种Socket服务
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
互联网企业中,一般服务都是部署到Linux系统上的,掌握常用的Linux命令是必不可少的,这样才能在日常工作中快速排查服务出现的问题。
一个强大的文本分析工具,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。在命令行中使用,但更多是作为脚本来使用。
使用方法:
awk '{pattern + action}' {filenames}
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
使用方法:
top -d 1 #设置top的显示间隔(以秒计)
top -n 3 #设置top退出前迭代的次数
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
使用方法:
netstat -a # 列出所有端口
netstat -apu # 显示UDP端口号的使用情况
netstat -i # 显示网卡列表
netstat -n # 显示所有已建立的有效连接
Linux系统一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。学习以及工作中总难免需要使用到grep命令对某字符进行搜索。
grep text filename # 在某个文件中搜索某文本
grep beijing -c testfile # 显示符合的行数
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
less [参数] 文件
用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail +20 notes.log # 显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -f notes.log # 要跟踪名为 notes.log 的文件的增长情况