
03 操作系统
系统
喵了个咪的回忆丶
Java后台
展开
-
页面置换算法(虚拟内存的换页算法)/(缓存淘汰算法)
虚拟内存换页的算法有哪些?最优页面置换算法:将最长时间内不再被访问的页面置换标记出来,然后把因调用这个页面而发生的缺页中断推迟到将来。是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。最近最少使用页面置换算法(LRU):指维护一个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。最近未使用页面置换算法(NRU):优先淘汰没有被访问的已修改页面。先进先出页面置换...原创 2019-11-26 22:12:10 · 1024 阅读 · 0 评论 -
进程的调度算法/CPU调度方式
进程的调度算法有哪些?先来先服务调度算法: 非抢占式的调度算法,按照请求的顺序进行调度。有利于长作业,但不利于短作业,因为可能出现短作业一直等待前面的长作业执行完毕才执行的问题。短作业优先调度算法: 非抢占式的调度算法,按估计运行时间最短的顺序进行调度。如果一直有短作业到来,那么长作业可能永远得不到调度。最短剩余时间优先调度算法: 按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整...原创 2019-11-26 19:54:27 · 1522 阅读 · 0 评论 -
死锁问题
死锁的必要条件互斥条件:每个资源要么已经分配给了一个进程,要么就是可用的。占有和等待条件:已经得到了某个资源的进程可以再请求新的资源。破坏条件的方法:让所有进程在执行前请求所需要的全部资源。不可抢占条件:进程获取到的资源在使用完之前不能被其他线程抢占。环路等待条件:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。破坏方法:给资源统一编号,进程只能按...原创 2020-07-27 16:25:41 · 159 阅读 · 0 评论 -
进程间的通信方式
进程间的通信方式有哪些?管道:支持半双工通信,数据单向流动,只能用于父子进程和兄弟进程。命名管道 FIFO:也具有管道的性质,但解除了只能在父子进程中使用的限制。消息队列:它是消息的链接表,独立于发送和接收进程。信号量:它是一个计数器,用来控制多个进程对共享资源的访问。共享内存:多个进程共享同一资源,数据不需要在进程之间复制,所以是最快的通信方式,一般和信号量结合使用。套接字:用于不...原创 2019-11-26 16:40:55 · 221 阅读 · 0 评论 -
进程、线程、协程
进程与线程进程是资源分配的基本单位;线程是进程的一个执行单元,它是比进程更小的能独立运行的基本单位。一个进程中有多个线程,多个线程共享所属进程的资源。创建或撤销进程时,系统都要为它分配或回收资源,开销远比线程的大,而且线程的切换开销也比进程的要小。多进程和多线程:多进程中,每个进程拥有自己的数据,互不干扰,同步简单。但占用内存多,切换复杂,CPU利用率低。多线程中,多个线程共享所...原创 2019-11-26 16:21:23 · 173 阅读 · 0 评论 -
mac安装brew、maven
/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"原创 2021-07-20 22:21:50 · 645 阅读 · 0 评论 -
LRU的实现(手撕)
import java.util.LinkedHashMap;import java.util.Map;public class LRU { class LRUCache extends LinkedHashMap<Integer, Integer> { private int capacity; //最多能缓存多少数据 public L...原创 2019-10-28 13:23:04 · 557 阅读 · 0 评论 -
互斥锁和自旋锁
互斥锁互斥锁:指的是同一时刻只能有一个线程获得互斥锁,其余试图请求该互斥锁的线程将会被挂起,不占用CPU资源,直到前面的线程释放了该互斥锁,其余线程才会被唤醒。它只有两种状态:上锁和解锁。可以用来控制对共享资源的访问。自旋锁自旋锁:当某个线程获得自旋锁后,别的线程会一直做循环,尝试加锁。也就是它们并不会让出CPU,这样做的好处是节省了线程从睡眠状态到唤醒状态过程中内核产生的消耗,在加锁时间短暂的环境下这点会提高很大的效率。所以自旋锁适用于锁的持有者保存时间较短的情况。自旋锁有可能造成死锁,比原创 2020-09-01 14:08:42 · 178 阅读 · 0 评论 -
内存溢出和内存泄漏的区别
内存溢出和内存泄漏的区别内存溢出内存溢出 (OOM,out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer(范围-2147483648 ~ 2147483647),但给它存了long才能存下的数,那就会引发内存溢出。原因内存中加载的数据量过于庞大,比如一次从数据库取出过多数据;集合类中某些对象的引用,使用完后未清空,使得JVM不能回收,导致内存溢出;代码中循环产生过多重复的对象实体;解决方案:原创 2020-08-09 14:58:28 · 210 阅读 · 0 评论 -
nginx高性能原因、负载均衡调度算法、select、poll、epoll的区别
1.为什么选择Nginx?原因一:IO多路复用epoll串行的方式进行IO流的处理:发生阻塞时效率会非常的低。多线程的方式进行IO流的处理:增加了多个线程,产生了更多的资源消耗IO多路复用:多个描述符的IO操作都能在一个线程内并发交替的顺序完成。复用指的是复用同一个线程。select采用线性遍历的方式,...原创 2019-06-19 21:55:19 · 429 阅读 · 0 评论 -
select、poll、epoll 的区别(IO多路复用)
IO多路复用(select、poll、epoll)fd_set 数组是存有 0 和 1 的位数组,fd 指文件描述符。常用的IO多路复用模型有三种:select、poll、epoll。select:它维护了一个数组结构 fd_set,调用 select 函数时,会从用户空间拷贝 fd_set 到内核空间,并监听是否有事件触发,有就通过无差别轮询的方式遍历找到事件触发的位置,然后执行相关的读或写操作。轮询的时间复杂度为 O(n)。缺点:内核对被监控的 fd_set 集合做了大小限制,最大为 1原创 2020-08-05 13:34:04 · 288 阅读 · 0 评论 -
fork 考点
forkfork 函数的功能是复制当前进程,调用一次,可以返回两次,返回值是子进程的pid,如果返回是0,则是子进程,如果返回值大于0,则是父进程,如果返回的是一个负值,则表示出现了错误,错误原因可能是进程数达到了系统上线,或者系统内存不足。子进程继承了父进程的数据空间、代码段、还有堆和栈。fork后如果父进程挂了,子进程就归系统管理。#include <stdio.h>...原创 2019-12-15 19:38:55 · 196 阅读 · 0 评论 -
Linux 面试点
ps -ef 或 ps -aux 可以查看当前的所有进程-A :所有的进程均显示出来,与 -e 具有同样的效用;-a : 显示当前终端机下的所有进程-u :以用户为主的进程状态 ;x :通常与 a 一起使用,可列出较完整信息。...原创 2019-12-15 18:21:10 · 155 阅读 · 0 评论 -
Linux命令(一)
1.磁盘管理ctrl + fn + insert 复制shift + fn + insert 粘贴作用命令切换目录cd /usr/local回到根目录cd /列出当前目录下的目录及文件ll,ls显示当前所在目录位置pwd查看文件全部内容cat 文件路径分页查看文件内容more 文件路径其中 ll 命令,查看指定目录下的文件...原创 2019-05-05 18:43:19 · 231 阅读 · 0 评论 -
linux命令(二)
linux文件属性第一栏代表这个文件的类型与权限-rwxr-xr–第一个为一组,代表文件类型,目录(d),文件(-) 。[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。后面三个为一组,且均为『rwx』 的三个参数的组合,rwx 所在的位置不变,有该权限就会显示字符,没有该权限就变成减号(-)。[-][rwx][...原创 2019-05-14 14:31:03 · 137 阅读 · 0 评论 -
进程上下文切换;用户线程、内核线程
一、进程上下文切换?对于单核单线程CPU而言,在某一时刻只能执行一条CPU指令。上下文切换(Context Switch)是一种将CPU资源从一个进程分配给另一个进程的机制。从用户角度看,计算机能够并行运行多个进程,这恰恰是操作系统通过快速上下文切换造成的结果。在切换的过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针,当前执行完的指令等等),再读入下一个进程的状态,然后执行此进程。二、用户线程用户线程指在用户空间中实现线程,内核对线程一无所知。这样做的一个最明显的优点是,用户线程可以在不原创 2020-09-02 13:48:50 · 676 阅读 · 1 评论 -
进程的状态
进程有哪些状态?进程一共有5种状态,分别是创建、就绪、运行、终止、阻塞。运行状态就是进程正在CPU上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。就绪状态就是说进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到CPU即可运行。阻塞状态就是进程正在等待某一事件而暂停运行,比如等待某资源为可用或等待I/O完成。即使CPU空闲,该进程也不能运行。运行态→阻塞态:往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。阻塞态→就绪态:则是等待的条件已满足原创 2020-09-02 13:43:25 · 1379 阅读 · 0 评论 -
操作系统的特征(四个)
操作系统的特征(四个)并发: 指同一时间段,多个任务都在执行,但单位时间内不一定同时执行。对于单核CPU处理器,同一个时刻只能执行一个程序,当有多个程序需要执行时,操作系统就会采用并发的方式在微观上交替地运行这多个程序。对于多核CPU处理器,比如4核,指的是操作系统同一时刻可以执行4个程序,而往往要运行的程序不止4个,所以多核CPU处理器也会采取并发的方式来运行更多的程序。并行指的是单位时间内...原创 2019-12-15 18:53:26 · 422 阅读 · 0 评论 -
僵尸进程、孤儿进程、守护进程
什么是僵尸线程? 危害? 避免僵尸进程的方式?什么是孤儿线程?什么是守护线程?如何创建守护线程原创 2019-12-15 18:35:25 · 224 阅读 · 0 评论 -
面试题——并发和并行
进程、线程、协程进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。线程是CPU资源分配的基本单位。线程之间进行协作时(生产者/消费者模式),可能会涉及到同步锁、线程阻塞状态和就绪状态之间的切换 以及线程上下文的切换,它们都会影...原创 2019-11-27 11:13:58 · 639 阅读 · 0 评论 -
clone 方法、浅拷贝和深拷贝
浅拷贝和深拷贝浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”...原创 2019-12-13 22:36:50 · 168 阅读 · 0 评论 -
32位和64位的区别
32位和64位的区别转载 2019-11-28 22:56:58 · 251 阅读 · 0 评论 -
分页、分段、段页式
分页虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。优点:没有外碎片,每个内碎片不超过页的大小。缺点:程序全部装入内存,要求有相应的硬件支持。分段将地址空间分成大小不等的段,每个段构成一个独立的地址空间。优点:可以针对不同的段采取不同的保护,也可以以段为单位来进行共享。缺点:会产生碎片。段页式地址空间分成大小不等的段,每个段又划分成...原创 2019-11-26 22:41:12 · 1184 阅读 · 0 评论 -
虚拟内存、物理内存
虚拟内存的思想/作用每个程序拥有自己的地址空间,这个空间被分割成多块,每一块称作一页,每一页有连续的地址范围,这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行...原创 2019-11-26 21:28:37 · 171 阅读 · 0 评论 -
用户态和内核态
用户态和内核态为了防止用户进程破坏操作系统的稳定,对一些资源的访问进行了等级划分,与系统相关的一些关键性操作必须由高级别的程序来完成,这样可以做到集中管理,减少冲突。 内核态和用户态是操作系统的两种运行级别,用户态权限最低,为3级,内核态权限最高,为0级。用户态运行用户程序,进程所能访问的内存空间和对象受到很大的限制,所占有的处理机是可被抢占的;内核态运行操作系统程序,能访问所有的内存空间和对...原创 2019-11-26 19:12:18 · 304 阅读 · 0 评论