1.进程和线程的区别? 协程与线程的区别?
并发与并行的区别? 进程与线程的切换流程?
一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。
进程和线程的区别体现在:调度,切换,拥有的资源和系统的开销上
进程是资源管理的基本单位,线程是程序执行的基本单位。 线程切换比进程快。进程有独立资源线程只能依靠进程得到资源。系统开销线程远小于进程,
协程是组织好的代码流程,我们程序员控制,线程/进程则是操作系统自动分配的,所以协程的效率也比较高,非抢占式的,进程和线程都可以包含多个协程。还有同步式和异步式的区别。
并发是一段时间内,可以运行多个程序,并行是一个时刻可以有多个程序在运行。并发单核处理器就可以,并行则需要多核
进程切换分为:1.切换页表使用新的地址空间,2.切换内核栈和硬件上下文,线程只需要第二步
因为每个进程都有自己的虚拟地址空间,线程是共享所在进程的虚拟空间的
2.为什么虚拟地址空间切换比较耗时?
因为虚拟空间切换需要查找页表,每个进程都有自己的页表,查找速度很慢 ,通常使用cache TLB 来缓存常用的地址映射,加快查找。但是进程切换后页表也切换了,TLB失效了又。
3.进程间通信方式有哪些? 进程间同步方式有哪些?
线程同步的方式有哪些? 线程的分类?
管道,信号,信号量,消息队列,共享内存,Socket
临界区,信号量,互斥量,事件
临界区,信号量,互斥量,事件
用户级线程和内核级线程,内核级线程依赖于内核,用户级线程仅存在于用户级中,不依赖于操作系统核心,应用进程利用线程库来完成创建和管理,速度比较快,操作系统内核无法感知用户级线程的存在。
4.什么是临界区?如何解决冲突?
一次仅允许一个进程使用的资源称为临界资源。
解决冲突方法:一次仅允许一个进程进入,进入临界区的进程要在有限时间退出,如果进程不能进入自己的临界区,应该让出CPU,避免进程出现“忙等”条件。
5.什么是死锁?死锁产生的条件?如何处理死锁问题?
两个或多个并发程序中,每个进程持有资源又等待其他进程释放他们保持的资源,未改变这种状态的情况下都不能向前推进。两个或多个进程的无期限阻塞,互相等待
互斥条件、请求和保持条件、不剥夺条件、循环等待条件
如何处理? 死锁预防 死锁避免(银行家) 死锁检测 死锁解除 鸵鸟策略
6.进程调度有哪几种?进程有哪些状态?
先来先服务,短作业优先,最短时间优先,时间片轮转,优先级调度。
7.什么是分页? 什么是分段?这俩有什么区别?
把内存划分为大小相等且固定的块,作为主存的基本单位。程序分布在页面中,页面散落在内存里,所以需要页表查找,具体查找一段数据,要两次内存访问,先通过页表找到地址加上偏移量,再找到数据
分段是为了满足程序员的逻辑需求,像数据共享,数据保护,动态链接 等等(分页是提高内存利用率),地址是二维的,一维是段号,二维是段内地址。
分页对程序员是透明的,分段需要程序员自己划分每个段, 页的大小不可以改,段可以
地址空间不一样,分页一维分段二维, 分页为了虚拟内存获得更大地址空间,分段为了数据保护共享。
8.什么是交换空间? 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别?
物理内存不足时,一些不常用的页可以被交换出去,腾给系统。程序启动时很多内存页被用来初始化,之后不再需要可以交换出去。物理内存和交换空间的总容量就是虚拟内存的可用容量
物理地址就是内存中真正的地址,相当于门牌号
段内偏移地址---有效地址,也是逻辑地址
线性地址可以看作是虚拟地址,虚拟地址不是真正的物理地址,但是最终会映射为物理地址。
9.页面替换算法有哪些?
最好的算法是老化算法和WSClock算法,分别是基于LRU和工作集的算法,都具有良好的性能并能够有效的实现。
10.什么是缓冲区溢出?有什么危害?什么是虚拟内存? 虚拟内存的实现方式有哪些?
溢出就是填充的数据超过了原本的容量,覆盖在了合法数据上
危害是:程序崩溃,导致拒绝服务 跳转并执行一段恶意代码。
虚拟内存是让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
虚拟内存中,允许将一个作业分多次调入内存中。虚拟内存实现需要建立在离散分配的内存管理方式基础上。请求分页存储管理。请求分段存储管理。请求段页式存储管理。
11.讲一讲IO多路复用?硬链接和软链接有什么区别?
IO多路复用是指内核一旦发现进程指定的一个或多个IO条件准备读取,他就通知该进程
硬链接创建的是独立的虚拟文件,包含了原始文件的信息和位置,本质是同一个文件。
就是在目录下创建一个条目,记录着文件名与inode编号,这个inode就是源文件的inode,删除任意一个条目,文件还是存在,只要引用数量不为0,但是硬链接有限制,不能跨越文件系统,不能对目录进行链接。修改硬链接原来的也修改,
软链接也称符号链接。
可以理解为windows的快捷方式,记录的是路径,建立的是符号链接,源文件删除了,链接文件就打不开了。
12.中断的处理过程?中断和轮询有什么区别?
保护现场,开中断,中断处理,关中断,恢复现场。
轮询:CPU对特定设备轮流询问 中断:通过特定事件提醒CPU。
轮询:效率低等待时间长,CPU利用率不高 中断:容易遗漏问题,CPU利用率不高。
13.什么是用户态和内核态?是如何进行切换的?
内核态运行的程序可以访问计算机的任何数据和资源,不受限制,用户态运行的程序只能受限的访问内存。 目的:对访问能力进行限制,防止随意清理内存导致系统崩溃。
切换通过操作系统的系统调用进行,用户态->内核态 叫trap进内核
14.Unix常见的IO模型
对于一次IO访问,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。read操作发生时,会经历:等待数据准备就绪。将数据从内核拷贝到进程中。
15.select、poll和epoll之间的区别?
这三者都是IO多路复用的机制,三者本质也都是同步I/O都需要在读写事件就绪后自己进行读写。select和poll的时间复杂度都是O(n),epoll的时间复杂度是O(1)
poll和select都是无差别轮询流,找出能读出数据或者写入数据的流并对其操作,但是poll没有最大连接数限制,基于链表存储的。
epoll类似于event poll 会把IO进行通知,是事件驱动的
16.如何理解虚拟内存
内存空间利用率问题,读写内存的安全性问题,进程之间的安全性问题,内存读写的效率问题
(待补充)