操作系统学习总结一

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:58   3364   0

1.进程通信的方式

进程通信IPC——inter process communication,通信方式主要有:

  1. 管道pipe,管道是一种半双工单向通信的方式,适用于亲缘关系的进程,通常指父进程与子进程。
  2. 有名管道named pipe,与管道类似,不同在于它适用于所有的进程,而不知是亲缘关系进程。
  3. 信号量semophone,某个资源可能会被多个进程同时访问,为了保证进程不冲突,使用信号量来确保同一时间只有一个进程在访问资源。通常是一种锁机制,用来使进程与进程或同一进程间多个线程同步。
  4. 消息队列message queue,存放于内核中。
  5. 信号signal,用来通知某个接受进程某个事件已经发生。
  6. 共享内存shared memory,有一个进程创建出一片共享的内存块,可被其他进程访问,是最快的IPC方式。
  7. 套接字socket,socket是一种通信接口,通常适用于internet的通信。

2.线程同步的几种方式

临界区,当多个线程访问一个独占资源时,临界区保证了同一时间只有一个线程在访问,其他线程会被挂起,知道访问进程退出临界区,在由其他线程竞争。

互斥量,类似于临界区,不同的是互斥量支持进程兼得同步,而临界区是线程间的。

事件,某个事件发生后,可以去执行接下来的任务,允许进程在执行某个事件后,唤醒其他进程去执行任务。

信号量,当需要限制访问共享资源的线程个数时,使用信号量,信号量通过使用PV操作来实现同步。

3.线程实现的方式

线程分为内核线程KST(Kernal Support Thread)与用户线程ULT(User Level Thread)。

内核线程由系统创建,管理,调度,所以系统回为线程安排时间片,一旦某个线程阻塞,不会影响其他线程,但是内核线程有内核管理,线程的创建以及用户态/内核态的模式切换代价都比较大,所以效率比较低。

用户线程是由用户程序来进行创建,调度,管理。相对于内核线程来说,更加灵活,由于是在用户态上的管理,所以代价比内核管理要少,效率更高,缺点是并发性不足,一旦一个线程进入阻塞态,那么其他线程都会阻塞,因为用户线程没有时间片的概念。

4.用户态和内核态的区别

用户态和内核态是操作系统运行的两种级别,当一个进程执行系统调用而进入内核代码中,称其处于内核态,内核态下cpu处于拥有系统最高权限的内核代码中,执行内核代码会用到当前进程的内核棧,每个进程都有自己的内核棧;当进程在执行用户代码的时候,cpu处于系统最低权限的用户代码中运行。

内核态下cpu可以执行任何指令,用户态下只能执行非特权指令。内核态可以随时切换到用户态,而用户态切换大内核态只有通过系统调用和中断才行。一般一个程序是先在用户态下执行,需要使用系统调用时,通过软中断来进入内核态。

5.用户棧和内核棧的区别

转:内核创建进程,会为进程创建两个棧,用户棧和内核棧。用户棧——存在于用户空间,当进程出于用户态时cpu堆栈指针寄存器存放用户棧的地址,使用用户棧;当进程出于内核态时,cpu堆栈指针寄存器存放内核棧地址,使用内核棧。

当由用户态切换到内核态时,首先将用户棧地址存在内核棧,然后让cpu堆栈指向内存棧;由内核态切换到用户态,将内核棧保存的用户棧地址回复为cpu堆栈指针内容即可。

我们是如何知道内核地址的呢?关键在于进程从用户态到内核态转换后,内核棧总是空的,因为用户态使用用户棧,转换到内核态,内核棧保存进程在内核中运行的信息。但是进程从内核态再到用户态时,内核棧就会被清空。(这个我认为是因为用户态的权限原因,无法获取内核态的信息,所以为空)所以进入内核态,只需将内核棧棧顶地址设置为cpu堆栈内容。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP