1.数组和链表的区别
数组在内存空间上是连续的,链表在内存空间上是不连续的,
数组的插入删除由于需要移动元素,所以效率比链表低
链表的插入操作比数组要块,但是查询操作要比数组慢,
5.
OSI7层模型 应用层,表示层,会话层,运输层,网络层,链路层和物理层
TCP/IP 应用层,传输层,网际层,网络接口层
因特网协议栈一般使用五层的物理模型 应用层,传输层,网络层,链路层和物理层
6.HTTP请求头内容
操作系统
7线程和进程之间的区别
进程**是系统进行资源分配的基本单位 而线程是CPU进行资源调度的基本单位**
**
线程依赖于进程,一个进程至少有一个线程
进程有自己的独立地址空间,线程共享所属进程的地址空间
进程是拥有系统资源的一个独立单元,而线程基本上不拥有系统资源,只有用在运行中必不可少的资源(计数器,寄存器,栈),和其他线程共享进程的的系统资源, CPU,IO和内存
在进程切换时,涉及到当前进程CPU环境的保存环境设置以及被新调度运行的CPU环境的设置,而线程的切换只需要保存和设置少量的寄存器内容,不涉及存储管理其方面的操作,进程的切换消耗远大于线程的切换消耗。
线程之间的通信相较于进程的同行更为方便,可以进行全局变量共享等来进行通信,而进程之间的通信需要以进程之间的通信方式来进行。
线程独占的资源
线程ID,寄存器中的值,线程自身的栈
8.进程之间的通信方式
1.管道通信
但是管道通信是半双工的,需要双方通信 的时候,需要建立两个管道来进行通信
管道通信只能用于父子进程和兄弟进程之间
2。共享内存
3.消息队列
4信号
有操作系统事先定义,接受到改信号的操作可以采取相应的行为
订阅-发布的设计模式
5信号量
信号量是一种特殊的变量,对他的操作都是原子的,两种操作V 类似 signal() 和 P wait()
V会增加信号标S的值
P会减少
V(s)
和信号量
6.socket通信,用于不同主机之间的进程通信
僵尸进程和孤儿进程
僵尸进程:
子进程结束后,父进程没有调用wait()方法
线程之间的同步
互斥量
互斥量是一个内核对象,只有拥有互斥量的对象才可以拥有访问互斥资源的权限,拥有互斥对象的线程处理完任务后,必须释放互斥对象
临界区
任意时刻只允许一个线程对临界区资源进行访问,拥有临界对象的资源可以对临界区资源进行访问
信号量
信号量允许多个线程同时访问同一资源,但是设置了最大资源计数,和当前可用资源技术,
- 信号量(Semaphore)
信号量就是一个停车场。
当前值是停车场里还剩下多少个空车位。
最大值是停车场里最多能容纳多少个车位。
当汽车进入停车场时,首先要在门口排队(sem_wait),得到进入许可后才能进入。
排队顺序原则上先到先得。
每进一辆车,停车场就少了1个停车位,即信号量当前值-1。
当前值为0时,停车场停满了,所有车不得进入统统在门口排队等。
当一辆车离开后,释放其所占据的停车位(sem_post),信号量当前值+1
信号量值得到释放后,如果门口有正在排队的车,那么就放进来,每放进来一个就重复前面的步骤。
- 互斥锁(Mutex)
Mutex就是厕所的隔间
门开着的时候谁都可以进
但是一次只能进一个人
进去后就从里面锁上门
厕所里有人的时候其他人就要排队等,直到里面的人出来
IO多路复用
什么是用户态和内核态
为了限制不同程序的访问能力,防止一些程序访问其他程序的内存内容,CPU划分了用户态和内核态两个权限等级
用户态只能受限的访问内存,且不允许访问外围设备,没有占用CPU的能力,CPU资源可以呗其他程序获取
内核态可以访问所有的数据和内存
所有的用户内存都运行在用户态,但有时候需要进行一些内核态的操作,
为什么要分开用户态和内核态
程序的安全性:防止用户和恶意程破坏系统/内存和硬件资源
封装性:用户不需要实现更加底层的代码,通过陷阱指令CPU切换到内核态,执行相应的任务,在切换回用户态,返回系统调用的结果。
陷阱指令:这种机制叫做系统调用,在CPU中叫做陷阱指令。
利于调度:如果多个用户进程都在等待键盘的输入,这个时候就需要进行统一调度,统一交给操作系统更加方便
死锁类型的分类
1.为什么会死锁
产生死锁的四个必要条件
资源互斥:
一个资源只能被一个进程使用
占有且等待:
一个进程在占有一个资源的同时等待另一个被其他进程占用的资源
不可被强占
分配给一个进程的资源不能被强行强占,只能有进程结束后自动释放
循环等待
若干个进程形成一个循环等待的资源关系,每个进程都在等待下一个进程所占有的资源。
2.死锁资源预防的四个策略
1.鸵鸟策略
直接忽略死锁,通常用在死锁不会对用户造成较大影响,或死锁发生的概率很低的情况下
2.死锁预防
死锁预防是破坏死锁形成的四个必要条件
1.资源互斥,允许某个资源被多个进程同时访问
2.破坏占有并等待条件
实行资源的预分配策略(当一个进程开始运行前,必须一次申请所有资源,否则不运行)
只允许进程在没有占用资源的时候才能申请资源,
缺点:很多时候无法阈值一个进程所需要的全部资源,
3.破坏不可被强占条件: 允许其他进程强占别的进程拥有的资源,但会降低系统新根呢
资源非陪管理器对进程进行分配资源是,如果有则分配,如果没有,则剥夺改资源所占有的全部资源,并让资源进入等待资源状态
4.破坏循环等待条件: 对所有的资源进行统一编号,所有进程对资源的申请必须按照序号的递增提出
,即只有编号较小的资源此案能申请编号较大的资源,这样避免了占有大号资源的进程去申请小号进程
一个进程申请小号资源后,在申请资源,必须申请编号更高的资源
一个资源释放某层的一个资源是,必须先释放占有层数较高的资源
一个资源申请同层的另一个资源时,必须先释放此层中已经占有的资源
死锁避免
动态的检测资源的分配状态,已确保系统处于安全状态,只有系统处于安全状态的时候,才会进行资源的分配
所谓安全状态是指:所有进程突然请求需要的所有资源,也能存在某种对资源的分配顺序,使得每一个进程运行完毕。