# 线程和进程的区别。

多个线程共享进程的堆和方法区(在 jdk1.8 之后改名为元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
总结:线程和进程最大的不同就是各个进程是独立的,而线程不一样,线程之间会相互影响。

  1. 什么是操作系统?

    1
    2
    管理计算机硬件与软件资源的程序,是计算机的基石。
    其核心部分是内核,负责内存管理,硬件管理。它的作用相当于是用来连接程序还有硬件的桥梁,决定着整个系统的性能还有稳定性。
  2. 什么是系统调用?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    首先进程在系统上的运行分为两个级别:
    1.用户态:user权限
    2.系统态:root权限

    当我们需要调用操作系统的子功能时,就需要系统调用,因为平时只有用户态的权限。(你可以简单这么理解)

    一般就是与系统态级别的资源有关的操作(比如文件管理,进程控制,内存管理等)都必须通过系统调用向系统提出服务的请求,而且是操作系统代劳操作。

    系统调用的分类:
    1.设备管理。完成设备的请求或释放,以及设备启动等功能。
    2.文件管理。完成文件的读、写、创建及删除等功能
    3.进程控制。完成进程的创建、撤销、阻塞及唤醒等功能
    4.进程通信。完成进程之间的消息传递或者信号传递等功能
    5.内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
  3. 进程和线程的区别。

    1
    2
    画图描述;
    用白话文描述就是:线程是进程划分为的更小运行单位,一个进程在执行过程中可以产生多个线程。区别就是每个进程是独立的,而线程不是独立的。原因是同一个进程中的线程会相互影响。
  4. 说一说进程有哪些状态?

    1
    2
    3
    4
    5
    创建状态(new)
    就绪状态(ready)
    运行状态(running)
    阻塞状态(waiting)
    结束状态(terminated)
  5. 进程间的通信常见的有哪些方式?

    1
    2
    3
    4
    5
    6
    7
    管道/匿名管道
    有名管道
    信号
    消息队列
    信号量
    共享内存
    套接字
  6. 线程间的同步方式有哪些?

    1
    2
    3
    4
    线程同步是两个或者多个共享关键资源的线程并发执行。
    1.互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,可以保证公共资源不会被多个线程同时访问。
    2.信号量:允许多个线程同时访问同一资源。但是需要设置最大线程数
    3.事件:Wait/Notify:通过通知操作保持多线程同步。
  7. 你知道操作系统中进程的调度算法有哪些吗?

    1
    2
    3
    4
    5
    先到先服务
    短作业优先
    时间片轮转
    多级反馈队列
    优先级
  8. 什么是死锁呢?

    1
    就是这样一种情况:多个进程或者线程同时在阻塞状态,其中的一个或者多个在等待资源的释放。但是由于资源被占用不被释放,则这些线程/进程无法到达终止态。
  9. 产生死锁的四个必要条件.

    1
    2
    3
    4
    互斥:这些资源处于非可共享模式,即一次只有一个进程可以使用。假如有另外一个进程需要使用改资源,就必须等到这个资源被释放掉才可以使用。
    占有并等待:一个进程至少占有一个资源,并且同时在等待另一个资源,而该资源被其他进程占有。
    非抢占式:资源不能被抢占。只可以在拥有该资源的进程完成任务并终止释放后才能被其它进程申请到。
    循环等待:一组进程形成闭环,都缺少资源在等待资源释放,就如同哲学家就餐问题,每个哲学家都拿起了筷子,但是都只拿到了一根,等待另一根中。
  10. 如何解决死锁?

    有四种方法:

    • 预防:限制并发进程对资源的请求,就是进程需要的资源不轻易分配出去
    • 避免:提前预测资源的使用
    • 检测:系统的检测确定与死锁相关的进程和资源。
    • 解除:与检测类似,用于将进程的死锁状态解除

11. 逻辑地址和物理地址的区别。
在一般情况下,程序员只会使用到逻辑地址,指针里面存储的数值就能理解为内存中的一个地址,这个逻辑地址由操作系统来决定,物理地址指的就是内存上的地址。

# 虚拟内存介绍一下。

重要意义:定义了一个连续的虚拟地址空间,并且把内存扩展到硬盘空间。


局部性原理:


虚拟内存的基础就是局部性原理,主要有两个方面:

  1. 时间局部性:某个数据以前被访问过,不久后再被访问的可能性比较大。(程序中存在大量的循环操作,所以有时间局部性)
  2. 空间局部性:某个存储单元被访问后,其附近的储存单元可能会被再次被访问。(因为指令通常是顺序存放且是顺序执行的,数据也一般是以向量、数组、表等形式族聚存储的)