操作系统与Liunx

操作系统
1、线程与进程
进程:互相独立的,资源分配的最小单位,有线程、内存、文件
线程:相互影响,cpu调用最小单位,有栈、程序计数器、线程本地内存

进程通信方式:共享内存、消息队列(想要共享的数据或者其他消息)、管道(双向)

协程就是这个原理,当某个任务遇到阻塞时,它会自动切换到其他任务,当其他任务遇到阻塞时再切换到另一个任务,相当于是异步的

2、堆、栈的区别:
答:栈内存存储的是局部变量而堆内存是实体,栈内存的更新速度高于堆内存,栈内存的生命周期一结束就会被释放而堆内存会被垃圾回收机制不定时回收

JVM有堆(线程共享实例对象都放在里面),栈(本地方法栈(封装的(其他的语言)方法)、虚拟机栈(调用方法放在里面,对象的引用,存操作数、操作方法(生成栈针,调用完了就释放针))、程序计数器、方法区(线程共享)
3、并发
答:同一时间多个线程同时执行。有可能影响线程安全,对数据进行加锁(数据库锁、线程锁:保证一个时间同一个对象只有一个线程访问),
4、高并发的场景与解决办法
答:场景:抢票、微博点赞、线程安全
解决办法:提高系统并发能力的方式,方法论上主要有两种:垂直扩展与水平扩展。前者垂直扩展可以通过提升单机硬件性能,或者提升单机架构性能,来提高并发性(有限制)。水平扩展:只要增加服务器数量,就能线性扩充系统性能(对系统架构有要求),如:客户端-反向代理-web应用-服务-数据库
解决案例:流量优化:防盗链处理;前端优化:减少http请求、合并css或js、添加异步请求、启用浏览器缓存和文件压缩、CDN加速、建立独立图片服务器;服务器端优化:页面静态化、并发处理、队列处理;数据库优化:数据库缓存、分库分表、分区操作、读写分离、负载均衡;web服务器优化:负载均衡、nginx反向代理;
5、死锁必要条件,解决办法
答:请求保持(线程资源请求)、资源互斥(某一时间内某一个资源只归某一个进程)、循环等待、不可剥夺
解决:预防死锁:设置限制条件破坏产生死锁的四个必要条件;避免死锁:在资源动态分配的过程中用某种方法防止系统进入。检测死锁:通过检测系统及时检测并采取措施解决。解除死锁:采取措施解决死锁。
6、进程调度方法,各自的优缺点
答:时间片轮转调度算法RR:给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完后便调度下个进程执行,不考虑进程等待时间和执行时间,属于抢占式调度。优点-兼顾长短作业,缺点-平均等待时间较长,上下文切换较费时间。适用于分时系统。
先来先服务调度算法FCFS:根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会出现饥饿现象。属于非抢占式调度,优点-公平、实现简单,缺点-不利于短作用。
优先级调度算法HPF:在进程等待队列中选择优先级最高的来执行。常用于批处理系统中和实时系统中。
多级反馈队列调度算法:时间片轮转与优先级调度结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。
高响应比优先调度算法:根据“响应比=(进程执行时间+进程等待时间)/ 进程执行时间”公式得到的响应比来进行调度。在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足段任务优先,同时响应比会随着等待时间增加而变大,优先级会提高,能够避免饥饿现象。优点是兼顾长短作业,缺点是计算响应比开销大,适用于批处理系统。
7、什么是僵尸进程、孤儿进程
背景知识:在unix/linux中,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,父进程永远无法预测子进程 到底什么时候结束。 当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
答:僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。
8、进程的生命周期
答:进程是一个动态的实体,从创建到消亡是一个进程的整个生命周期。
进程可能会经历各种不同的状态,一般有三种状态:

  • 就绪态: 进程已经获得了除cpu以外的所有其它资源,在就绪队列中等待cpu调度
  • 执行状态: 已经获得cpu以及所有需要的资源正在运行
  • 阻塞状态(等待状态): 进程因等待所需要的资源而放弃处理器,或者进程本
    来就不拥有处理器,且其它资源也没有满足。
    9、管道和命名管道的区别
    答:管道:1、管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;2、只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);3、单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。4、数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
    命名管道:FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出,对管道及FIFO的读总是从开始处读取数据,它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。
    10、内存分配算法
    答:首次适应算法:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
    最佳适应算法:从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
    最差适应算法:从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的内存大小范围较窄的系统。为适应此算法,空闲分区表(空闲区链)中的空闲分区按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留小的空闲区,尽量减少小的碎片产生
    循环首次适应算法:每次为进程分配空间的时候,从上一次刚分配过的空闲区的下一块开始寻找,比如,初始化的内存空闲区是用户输入的max大小,没有进行回收之前之前必定是只有最后一块是空闲的,但是经过回收之后,你设定的表(这里是设定了一张表,也可以用俩张,但是一张就可以解决的没必要俩张),从是空闲区的区号开始分配之后,标记此块,下次分配从标记的这一块开始向下寻找,符合就分配,然后标记分配的空闲区区号,与首次适应算法的区别就在这。

Linux
1、常用命令
cd切换目录、ps查看当前进程、退出exit、pwd查看当前路径、清屏clear、Ctrl+c彻底退出当前命令、执行睡眠Ctrl+z,查看帮助adduser --help、
列出指定目录清单ls(a所有详细信息)、in -s link source 建立软连接、in link source建立硬连接、创建目录mkdir、创建文件touch、复制文件cp、查看文件VI/cat/tail、
文件权限修改chmod、写vi、mv移动文件给文件改名,rm删除、通配符‘?’单个‘*’grep文本搜索工具 、kill杀死进程、find查找文件、df -hl查看磁盘使用、ifconfig
2、打印某个进程查询出来的第二列(pid)
3、查看io的命令:用 top 命令 中的cpu 信息观察
4、linux命令,问:怎么查找一个日志文件中的某个词:grep 词 文件名
5、Linux的进程加载机制:fork()
6、linux排错,线上遇到bug的处理流程
7、linux命令 求nginx的日志的request_time的平均响应时间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值