操作系统学习链接

1、进程与线程区别

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。
  • 进程有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。
  • 线程是共享进程中的数据的,使用相同的地址空间。
  • 创建一个线程比创建一个进程要快得多。

进程和线程的区别(超详细)

2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量

互斥锁、自旋锁、读写锁、条件变量是常见的线程同步方式。互斥锁是最常见的线程同步方式,它是一种特殊的变量,它有 lock 和 unlock 两种状态,一旦获取,就会上锁,且只能由该线程解锁,期间,其他线程无法获取。自旋锁通过C++11的 std::atomic 类实现,它是一种比较轻量级的锁,它不会使线程进入睡眠状态,而是在等待锁的过程中循环检测锁是否被释放。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。它允许多个线程同时读共享数据,但只允许一个线程写共享数据。条件变量是一种同步机制,它可以使一个或多个线程等待某个条件成立后再继续执行。
线程同步的几种方式
如何理解互斥锁、条件锁、读写锁以及自旋锁?
3、互斥锁与自旋锁的底层区别
互斥锁和自旋锁都是用于保护共享资源的锁,但是它们的实现方式不同。互斥锁在等待期间会放弃CPU,而自旋锁则是不断循环并测试锁的状态,这样就一直占着CPU。
互斥锁和自旋锁在底层实现上的区别如下:

  • 互斥锁是基于自旋锁实现的,所以自旋锁相较于互斥锁更加底层。
  • 获取不到互斥锁时会发生上下文切换并休眠,而自旋锁则“自旋”在原地直到被获取。

Linux自旋锁与互斥锁的区别与选用原则
自旋锁和互斥锁的区别
深入理解互斥锁 自旋锁的实现机制
面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

4、孤儿进程与僵尸进程

孤儿进程和僵尸进程都是在操作系统中未被清理的进程,但它们具有不同的状态和含义。孤儿进程是指当一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
而僵尸进程则是指在操作系统中,一个已经完成执行的子进程,但其父进程并没有调用wait()或waitpid()来获取其终止状态信息,这样的子进程就称为僵尸进程。僵尸进程会占用系统资源,如果产生大量的僵尸进程,将会导致系统无法分配进程号。
孤儿进程和僵尸进程的区别
僵尸进程与孤儿进程
孤儿进程与僵尸进程

5、死锁及避免

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁预防是设法至少破坏产生死锁的四个必要条件之一,严格的防止死锁的出现;而死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁。
死锁和产生死锁的四个必要条件以及如何避免和预防死锁
什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?

6、多线程与多进程比较

多线程和多进程都是实现并发编程的方式,但是它们之间有很大的区别。多进程中,每个进程都有自己的地址空间,数据共享复杂,同步简单;而多线程中,所有线程共享同一块地址空间,数据共享简单,同步复杂。多进程占用内存多、切换复杂、速度慢、CPU利用率低,而多线程占用内存少、切换简单、CPU利用率高。多进程的编程简单、调试简单,而多线程的编程复杂、调试复杂
多线程是在同一个进程中,多线程比多进程成本低,但性能更差。如果你需要处理计算密集型任务,那么多进程可能更适合你。因为在 Python 中有 GIL 这把大锁的存在,导致执行计算密集型任务时多线程实际只能是单线程。
linux中多进程和多线程的区别是什么
多进程和多线程区别以及优缺点[通俗易懂]
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket

  • 管道:数据只能单向流动,所以如果要实现双向通信,就要创建2个管道。管道分为匿名管道和命名管道。匿名管道只能在父子进程关系之间使用,而命名管道可以在任意两个进程之间使用。
  • 消息队列:消息队列是消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 信号量:信号量是一个计数器,用于多进程对共享资源的访问。它可以用来表示某个资源的可用数量,或者表示某个进程可以访问某个资源的数量。
  • 共享内存:共享内存是最快的一种IPC方式,它允许多个不相关的进程访问同一块物理内存。共享内存是在两个或多个进程之间共享和传递数据的一种非常有效的方式。
  • Socket:Socket是一种通信机制,它允许不同的进程在不同的计算机之间进行通信。Socket是一种全双工、面向连接、可靠的通信机制

Linux进程间通信详解(最全)
8、管道与消息队列对比
管道和消息队列都是进程间通信的方式,但是它们有不同的应用场景。管道是一种半双工的通信方式,只能在具有亲缘关系的进程之间使用,而消息队列则可以在不具有亲缘关系的进程之间使用。消息队列与管道以及有名管道相比,具有更大的灵活性,首先,它提供有格式字节流,有利于减少开发人员的工作量;其次,消息具有类型,在实际应用中,可作为优先级使用。
消息队列与管道区别
进程间通信的方式(三):消息队列
进程间的三种通信方式,管道、消息队列、共享内存,哪一种的效率最高呢?

补充知识

什么是有亲缘关系的进程?

有亲缘关系的进程是指具有某个共同的祖先进程,例如,一个进程经过一次或者多次fork之后,产生的子进程就是该进程的亲缘关系进程。这些亲缘关系的进程可以通过一些特殊的系统调用来进行通信和同步。

什么是fork

在计算机科学中,fork是UNIX或类UNIX操作系统中的一个系统调用,用于创建一个新的进程或子进程。新进程是原始进程的副本,但有自己的唯一进程ID。新进程(子进程)与原始进程(父进程)并行运行,但它们有不同的内存空间。
GitHub 的 Fork 是什么意思?
9、fork进程的底层:读时共享,写时复制
fork()是Linux中的一个系统调用,用于创建一个新进程。在调用fork()之后,父进程和子进程都会执行fork()之后的指令。不过,由于fork()是通过复制父进程的内存空间来创建子进程的,所以父进程和子进程之间的内存空间是相互独立的。
fork进程的底层是读时共享,写时复制。当父进程fork子进程时,子进程会和父进程会以只读的方式共享所有私有的可写页,当有一方将要写的时候会发生COW缺页异常。
linux 进程 fork()
进程系统调用——fork函数深入理解(代码演示)
十九. fork的原理及实现

什么是COW缺页异常?

COW缺页异常是指当父子进程fork子进程时,子进程会和父进程会以只读的方式共享所有私有的可写页,当有一方将要写的时候会发生COW缺页异常。此时,操作系统会为子进程分配新的物理页,并将父进程的数据复制到新的物理页上,然后将新的物理页映射到子进程的虚拟地址空间中。这样,父子进程就各自拥有了各自的物理页,互不影响。
详细讲解Linux内核写时复制技术COW机制(手撕源代码)

什么是私有的可写页?

私有的可写页是指进程的私有地址空间中的页,这些页只能被该进程访问,而且可以被该进程读写。在Linux中,父进程fork子进程的时候,子进程会和父进程会以只读的方式共享所有私有的可写页,当有一方将要写的时候会发生COW缺页异常。

什么是只读方式共享?

只读方式共享是指在多个进程之间共享数据时,其中一个进程拥有数据的读写权限,而其他进程只有读权限。这样可以避免多个进程同时写同一块内存而导致的数据不一致问题。
进程共享(读时共享写时复制)
10、线程上下文切换的流程
线程上下文切换是指在多线程环境下,CPU从一个线程切换到另一个线程时,需要保存当前线程的上下文环境,以便下次切换回来时能够恢复之前的状态。具体流程如下:
1、保存CPU上下文,也就是各类寄存器的信息。
2、触发软中断,从用户态转化到内核态,恢复内核栈的寄存器信息,内核栈会执行对应的线程切换函数,从就绪线程中选出一个线程来执行,并恢复线程对应的CPU上下文。
线程切换详解
进程、线程上下文切换
多线程中的上下文切换是什么?
11、进程上下文切换的流程
12、进程的调度算法

13、阻塞IO与非阻塞IO

阻塞IO和非阻塞IO是两种不同的IO模型。阻塞式IO指的是“一旦输入/输出工作没有完成,则程序阻塞,直到输入/输出工作完成”。而非阻塞式IO则是指“当请求无法完成时,不会阻塞进程,而是立即返回一个错误码”。这两种模型的主要区别在于程序等待调用结果时的状态。
怎样理解阻塞非阻塞与同步异步的区别?
阻塞式IO和非阻塞式IO

14、同步与异步的概念

同步和异步是指访问数据的机制,同步一般指主动请求并等待I/O操作完毕的方式,I/O操作完成后才能继续执行后面的代码;而异步则是指发起I/O操作后,不必等待I/O操作完成,可以继续执行后面的代码。
同步和异步的区别在于:同步需要等待操作完成后才能继续执行后面的代码,而异步则不需要等待操作完成就可以继续执行后面的代码。
深入理解 I/O(阻塞、非阻塞,同步、异步)的概念及其区别
从小白到高手,你需要理解同步与异步
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法

20、操作系统的四大特征:并发、虚拟、共享、异步

  • 并发性:指两个或多个事件在同一时间间隔内发生,即这个设备一会执行这个事件一会执行那个文件,多个事件共同使用一个设备。
  • 共享性:指系统中的资源可供多个并发执行的进程共同使用。由于资源的种类很多,如CPU、内存、硬盘、打印机等,因此共享的方式也有很多种。
  • 虚拟性:指把一个物理实体转换为若干个逻辑上的对应物。例如,虚拟内存是指把硬盘空间当作内存来使用,虚拟机是指把一台计算机模拟成多台计算机来使用。
  • 异步性:指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。

操作系统的特征 (一) — 并发、共享、虚拟、异步

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值