文章目录
1,进程和线程的区别
- 进程是资源分配的最小单位,线程是CPU调度的最小单位
- 同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
- 进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
- 线程是轻量级的进程,他的创建和销毁所需的时间比进程小的多,所有操作系统中的执行功能都是由创建线程去完成的
- 线程中中执行一般都要进行同步和互斥,因为他们共享同一进程的资源
2,进程的几种状态
- 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源
- 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数
- 阻塞状态: 进程等待某种条件,在条件满足之前无法执行
3,进程/线程同步的方式有哪些
- 互斥量(互斥锁):互斥量只有一个,只有拥有互斥量的线程才能访问资源,保证同一时刻只能一个线程访问资源
- 信号量:允许同一时刻有多个线程访问同一个资源,但是要控制同时访问的线程最大数量,互斥量相当于特殊的信号量
- 信号:通过通知操作的方式来保存同步,当一个线程任务执行完成后,主动唤醒另一个线程执行任务。比如在某些网络应用程序中,一个线程如A负责侦听通信端口,另外一个线程B负责更新用户数据,利用事件机制,则线程A可以通知线程B何时更新用户数据。
-~~ 临界区(已被舍去)拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止~~。互斥对象和临界区(代码的一个区间)对象非常相似,只是互斥量允许在进程间使用,而临界区只限制于同一进程的各个线程之间使用,但是更节省资源,更有效率。
4,线程间通信方式
由于多线程共享地址空间和数据空间(同一程序内),所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统(也就是内核的调度)。
线程在同一代码区域,所以比较好实现
- 使用全局变量 在不同线程间,使用每个线程都可以访问到的全局变量进行通信
- 使用消息队列 不同线程间构建消息队列,将要通信的消息放入队列中
5,进程间通信的方式
进程不在同一代码区域
- 匿名管道:半双工模式,数据只能单向流动,只能在子父进程间通信
- 命名管道:和匿名管道一样,但是允许无亲缘关系的进程间进行通信
- 消息队列:通过操作系统的调用进行消息传递
- 共享存储:通过设置共享存储区(内存或磁盘),通过读写共享存储区进行交互数据
- 套接字:通过网络编程,利用tcp/ip协议来进行进程间的通信
6,什么是死锁?死锁产生的原因?死锁的必要条件?怎么处理死锁?
- 死锁是线程相互竞争资源而产生得一种僵持状态,如果没有外力得干预将一直持续这个状态
- 原因:系统资源不足,相互竞争资源,请求资源顺序不当
- 产生得必要条件
1,互斥条件:同一时刻,一个资源只能给一个进程使用
2,不可剥夺权限当一个资源在未使用完毕时,不能被其他线程强行剥夺,必须等待使用完毕
3,请求和保持条件当一个线程申请它所需要得资源时,在申请新的资源同时,继续占用着现有资源
4,循环等待条件在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所申请得资源。
以上给出了导致死锁的四个必要条件,事实上循环等待的成立蕴含了前三个条件的成立 - 处理死锁的方法:破坏四个必要条件中的其中一个,就能解除死锁(剥夺资源,避免循环调用,杀死其中一个资源)
7,windows内存存储方式:
段存储,页存储,段页存储
8,什么是虚拟内存
电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术(linux swap交换空间),即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张
9,什么是缓冲区溢出?有什么危害?其原因是什么?
- 指当前计算机向缓冲区填充数据时超出了缓冲区本身的容量,造成溢出的数据覆盖在正常的数据上
- 危害:程序意外崩溃,跳转并执行一段恶意的代码
- 原因:主要是程序没有仔细检查用户的输入
10,分页和分段的区别
- 段是信息的逻辑单位,根据用户进行划分的,对用户可见,页是信息的物理单位,为了方便管理而划分的
- 段的大小不确定,由它完成的功能确定,页的大小固定,由操作系统决定
- 段向用户提供二维空间,页向用户提供的是一维地址空间