电子说
定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。
目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。
最基本的特征,互为存在条件:并发,共享;
(1)并行:指两个或多个事件可以在同一个时刻发生,多核CPU可以实现并行,一个cpu同一时刻只有一个程序在运行;
(2)并发:指两个或多个事件可以在同一个时间间隔发生,用户看起来是每个程序都在运行,实际上是每个程序都交替执行。
(3)共享性:操作系统的中资源可供多个并发的程序共同使用,这种形式称之为资源共享。
虚拟和异步特性前提是具有并发性。
(4)虚拟性:表现为把一个物理实体转变为若干个逻辑实体。
(5)异步性:在多道程序环境下,允许多个进程并发执行,但由于资源等因素的限制,使进程的执行以“停停走走”的方式运行,而且每个进程执行的情况(运行、暂停、速度、完成)也是未知的。
中断机制的作用:为了在多道批处理系统中让用户进行交互;
中断产生:
中断的分类:
外中断的处理过程:
为什么需要进程:
进程控制块(PCB):用于描述和控制进程运行的通用数据结构,记录进程当前状态和控制进程运行的全部信息,是进程存在的唯一标识。
进程(Process)与线程(Thread):
区别与联系:
就绪状态:其它资源(进程控制块、内存、栈空间、堆空间等)都准备好、只差CPU的状态。
执行状态:进程获得CPU,其程序正在执行。
阻塞状态:进程因某种原因放弃CPU的状态,阻塞进程以队列的形式放置。
创建状态:创建进程时拥有PCB但其它资源尚未就绪。
终止状态:进程结束由系统清理或者归还PCB的状态。
生产者-消费者问题:有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程需要将所生产的产品放到缓冲区中(+1操作),消费者进程可以从缓冲区取走产品消费(-1操作)。
产生问题:当两者并发执行时可能出差错,导致预期的结果与真实的结果不相符:当执行生产者+1和消费者-1操作之后,缓冲区的值从10变为了11。
哲学家进餐问题:有5个哲学家,他们的生活方式是交替的思考和进餐,哲学家们共同使用一张圆桌,分别坐在5张椅子上,圆桌上有5只碗和5只筷子。平时哲学家们只进行思考,饥饿时则试图取靠近他们的左右两只筷子,只有两只筷子都被拿到的时候才能进餐,否则等待,进餐完毕后,放下左右筷子进行思考。
这会导致以下的问题,筷子就相当于临界资源:
临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可重新竞争使用共享资源。
进程同步的作用:对竞争资源在多进程间进行使用次序的协调,使得并发执行的多个进程之间可以有效使用资源和相互合作。
进程间同步的四原则:
1.使用fork系统调用创建进程:使用fork系统调用无参数,fork会返回两次,分别返回子进程id和0,返回子进程id的是父进程,返回0的是子进程。
2.共享内存:在某种程度上,多进程是共同使用物理内存的,但是由于操作系统的进程管理,进程间的内存空间是独立的,因此进程默认是不能访问进程空间之外的内存空间的。
3.Unix域套接字
域套接字是一种高级的进程间通信的方法,可以用于同一机器进程间通信。
套接字(socket):为网络通信中使用的术语。
Unix系统提供的域套接字提供了网络套接字类似的功能,如Nfinx、uWSGI等。
服务端和客户端分别使用Unix域套接字的过程:
线程同步的方法:
1.互斥锁:互斥锁是最简单的线程同步的方法,也称为互斥量,处于两态之一的变量:解锁和加锁,两个状态可以保证资源访问的串行。原子性:指一系列操作不可被中断的特性,要么全部执行完成,要么全部没有执行。
2.自旋锁:自旋锁是一种多线程同步的变量,使用自旋锁的线程会反复检查锁变量是否可用,自旋锁不会让出CPU,是一种忙等待状态,即死循环等待锁被释放,自旋锁的效率远高于互斥锁。特点:避免了进程或者线程上下文切换的开销,但是不适合在单核CPU使用。
3.读写锁:是一种特殊的自旋锁,允许多个读操作同时访问资源以提高读性能,但是对写操作是互斥的,即对多读少写的操作效率提升很显著。
4.条件变量:是一种相对比较复杂的线程同步方法,条件变量允许线程睡眠,直到满足某种条件,当 满足条件时,可以给该线程信号通知唤醒 。
进程的类型:
进程的标记:
操作Linux进程的相关命令:
定义:指计算机通过决策决定哪个就绪进程可以获得CPU使用权。
什么时候需要进程调度?
进程调度方式:
非抢占式调度:只能由当前运行的进程主动放弃CPU;
抢占式调度:可由操作系统剥夺当前进程的CPU使用权。
进程调度的三大机制:
就绪队列的排队机制:为了提高进程调度的效率,将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程。
选择运行进程的委派机制:调度程序以一定的策略,选择就绪进程,将CPU资源分配给它。
新老进程的上下文切换机制:保存当前进程的上下文信息,装入被委派执行进程的运行上下文。
进程调度算法:
死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。永远在互相等待的进程称为死锁进程。
饥饿:由于长期得不到资源导致进程无法推进;
死循环:代码逻辑BUG。
死锁的产生:竞争资源(共享资源数量不满足各进程需求)、进程调度顺序不当,当调度顺序为A->B->C->D时会产生死锁,但改为A->D->B->C则不会产生。
死锁的四个必要条件:
死锁的处理策略:
一.预防死锁的方法:破坏四个必要条件的中一个或多个。
二.银行家算法:检查当前资源剩余是否可以满足某个进程的最大需求;如果可以,就把该进程加入安全序列,等待进程允许完成,回收所有资源;重复1,2,直到当前没有线程等待资源;
三.死锁的检测和解除:死锁检测算法,资源剥夺法,撤销进程法(终止进程法),进程回退法;
全部0条评论
快来发表一下你的评论吧 !