操作系统基础知识

进程和线程的区别?

首先来说进程和线程的定义:

  • 进程:程序执行时的一个实例,进程是系统进行资源分配和调度的一个基本单位;
  • 线程:进程的一个实体,是CPU调度和分派的最小单位,线程只拥有一点在运行过程中必不可少的资源(程序计数器、通用寄存器、栈等),其他的共享与它所属的进程;
    从进程和线程的关系来看:一个线程必定属于某个进程,而一个进程可以用于多个线程而且至少拥有一个线程,多个线程可以并发执行;
    其次,进程和线程之间的区别在于以下几点:
    1、进程拥有独立的堆栈、数据段和代码段,所以每启动一个进程都要为其分配独立的地址空间,系统开销比较大,而线程拥有独立的栈空间,共享堆、数据段和代码段,因而开销比较小,切换速度也比进程快,效率高;
    2、进程因为拥有其独立的地址空间,一个进程奔溃后,在保护模式下不会对其他进程产生影响,而线程只是进程中不同执行实体,一旦线程死掉整个进程也会退出;
    3、在通信机制上,由于进程之间互相独立,进程的通信机制相对比较复杂,譬如管道、消息队列、信号量、共享内存等通信机制,而线程由于共享数据段所以通信机制比较方便。
    最后,在多线程与多进程的选择上,有以下几条建议:
    1、当需要频繁的创建和销毁优先使用线程
    2、对于计算密集型的应用,优先使用线程
    3、强相关的处理用线程,弱相关的处理用进程
    4、线程非常适合SMP的场景,进程更适合需要扩展到多机分布的场景

信号和信号量的区别?

  • 相同点:
    • 两者都是进程间通信的方式
  • 不同点:
    • 信号:是一种处理异步事件的方式,用于通知进程有某个事件发生,例如通过Ctrl+C发送SIGINT中断信号。
    • 信号量:进程间通信处理同步互斥的机制,协调进程或者线程正确、合理的使用公共资源。

共享内存mmap和shm的区别?

  • 相同点:
    • 两者都是共享内存的实现方式
  • 不同点:
    • 1、POSIX标准使用的是mmap,具有简单易用的特点,System V标准使用的是shmxxx函数组,其中shm_open、shm_unlink函数也是POSIX定义的函数,结合mmap使用;
    • 2、mmap映射的内存不是持久化的,如果进程关闭,映射随机失效,除非事先已经映射到一个文件上;shmget映射的内存是随内核持续的,在内核自举时或者显式删除;
    • 3、调用shm_open函数时会创建一个文件并返回这个文件描述符,这个文件时内核创建的特殊的文件,它属于shm文件系统,它的实现方式和mmap一样,只是映射的文件时内核中特殊的文件还是文件系统中的文件,任何进程都可以共享这个特殊的文件,这个特殊文件挂载点在/dev/shm下,也就是内存/交换分区中。

进程间通信的机制有哪些?

信号、文件、文件锁、管道(无名管道、有名管道)、消息队列、信号量、共享内存、UNIX域套接字


线程间同步的机制有哪些?

互斥锁、条件变量、POSIX信号量、自旋锁、读写锁


操作系统常见的进程调度算法有哪些?

  • 先来先服务调度算法
  • 短作业调度算法
  • 优先级调度算法
  • 高响应比优先调度算法
  • 轮转调度算法
  • 多级反馈队列调度算法