【QandA C++】并发和并行、软链接、硬链接、用户态和内核态、异常和中断、信号和信号量等重点知识汇总

目录

并发和并行

软链接和硬链接

用户态和内核态

异常和中断

信号和信号量有什么区别


并发和并行

  1. 并发:多个进程在一个CPU下采用进程切换的方式,在这段时间内,让多个进程都得以推进
  2. 并行:多个进程在多个CPU下分别同时运行,称之为并行

软链接和硬链接

软链接和硬链接是用于在文件系统中创建链接的两种方法。

二者对比

1. 定义不同

  • 软链接是一个特殊的文件,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。 通过ls -i -l命令我们可以看到,软链接文件的inode号与源文件的inode号是不同的,并且软链接文件的大小比源文件的大小要小得多。
    • 软链接就类似于Windows操作系统当中的快捷方式
    • ln -s myproc myproc-s
  • 硬链接就是一个文件的一个或多个文件名。把文件名和文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。通过ls -i -l命令我们可以看到,硬链接文件的inode号与源文件的inode号是相同的,并且硬链接文件的大小与源文件的大小也是相同的。
    • 相当于文件的别名,硬链接本质没有创建文件
    • ln myproc myproc-h

2. 限制不同

  • 硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;
  • 软链接可对不存在的文件或目录创建软链接;可交叉文件系统;

3. 创建方式不同

  • 硬链接不能对目录进行创建,只可对文件创建;
  • 软链接可对文件或目录创建

4. 影响不同

  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件

文件的属性叫做元信息,保存元信息的结构称为inode,唯一的编号inode号

  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接。

用户态和内核态

内核态

cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。

用户态

只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

最大的区别就是权限不同,在运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。

为什么要有这两态

需要限制不同的程序之间的访问能力,防止他们获取别的程序的内存数据,或者获取外围设备的数据,并发送到网络,CPU划分出两个权限等级 – 用户态和内核态。

异常和中断

中断

大家都知道,当我们在敲击键盘的同时就会产生中断,当硬盘读写完数据之后也会产生中断,所以,我们需要知道,中断是由硬件设备产生的,而它们从物理上说就是电信号。

之后,它们通过中断控制器发送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中)。最后,由CPU发送给内核,有内核处理中断。

异常

我们在学习《计算机组成原理》的时候会知道两个概念,CPU处理程序的时候一旦程序不在内存中,会产生缺页异常;当运行除法程序时,当除数为0时,又会产生除0异常。

所以,大家也需要记住的是,异常是由CPU产生的,同时,它会发送给内核,要求内核处理这些异常

相同点

  • 最后都是由CPU发送给内核,由内核去处理
  • 处理程序的流程设计上是相似的

不同点

  • 产生源不相同,异常是由CPU产生的,而中断是由硬件设备产生的
  • 内核需要根据是异常还是中断调用不同的处理程序
  • 中断不是时钟同步的,这意味着中断可能随时到来;异常由于是CPU产生的,所以它是时钟同步的

时钟同步:指各个设别之间的时间保持同步以保证数据一致性

  • 当处理中断时,处于中断上下文中;处理异常时,处于进程上下文中

信号和信号量有什么区别

信号是一个软件中断,通常用于通知进程发生了某个事件,如键盘输入、硬件异常等。信号是一种异步通信方式,即它可以在任何时间点发送给进程,进程需要预先注册信号处理函数来响应信号。

信号量是一种同步工具,用于控制多个进程或线程对共享资源的访问。它是一个整数计数器,可以被多个进程或线程同时访问,但访问时会受到限制。

目的:

  • 信号通常用于通知进程某些事件的发生,例如终止信号(SIGTERM)可以用来请求进程正常退出。信号用于进程间的异步通信。
  • 信号量用于解决并发访问共享资源的问题,以确保多个进程或线程之间的协同工作。

使用:

  • 信号由操作系统或其他进程向目标进程发送,目标进程需要注册信号处理函数来捕获和处理信号。
  • 信号量通常由进程或线程内部使用,通过对信号量的操作(增加或减少)来控制对共享资源的访问。

状态:

  • 信号可以是有状态的,它可以携带一些信息,例如信号编号、发送者PID等。
  • 信号量通常是无状态的,它只是一个计数器,表示可用资源的数量。

例子:

  • 信号的例子包括SIGINT(Ctrl+C,中断进程)、SIGSEGV(段错误,访问非法内存)等。
  • 信号量的例子包括用于控制同时访问共享文件的进程数量,或者控制线程对有限资源(如线程池中的线程数)的分配。

总之,信号和信号量是不同的概念,用于不同的目的。信号是一种进程间通信方式,用于通知事件的发生,而信号量是一种同步工具,用于控制对共享资源的访问。

你可能感兴趣的:(单片机,嵌入式硬件)