操作系统基础

进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器,程序是指令、数据及其组织形式的描述,进程是程序的实体;进程(process)是一块包含了某些资源的内存区域(就绪状态、执行状态和等待状态)

进程的特征
1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
2.并发性:任何进程都可以同其他进程一起并发执行。
3.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
4.异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

 

线程:线程是进程中的一个实体,作为系统调度和分派的基本单位

线程的性质
1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
5.由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。

 

进程和线程的区别

一个程序至少有一个进程,一个进程至少有一个线程. 
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

 

进程调度有两种基本方式

非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程

剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则

 

线程调度的方式:分时调度模型和抢占式调度模型

 

进程同步机制

原子操作、信号量机制、自旋锁管程、会合、分布式系统

线程同步机制

临界区、互斥对象、信号量、事件

 

并发:并发是指两个或多个事件在同一时间间隔内发生,同一时刻只处理一个业务,多个业务在一个时间间隔内轮流进行处理

并行:并行是指两个或者多个事件在同一时刻发生

 

同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为(指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程)

      同步调用则在继续之前必须等待响应或返回值。如果不允许调用继续即无响应或返回值,就说调用被阻塞了,不能继续执行

异步:调用一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作,不需要等待先前的方法执行结束(发送一个请求,不需要等待返回,随时可以再发送下一个请

      求,即不需要等待); 异步调用是通过使用单独的线程执行的。原始线程启动异步调用,异步调用使用另一个线程执行请求,而与此同时原始的线程继续处理

 

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回(调用线程只有在得到结果之后才会返回)

非阻塞:在不能立刻得到调用结果之前,该函数不会阻塞当前线程,而会立刻返回

 

 

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
线程安全问题都是由全局变量静态变量引起的
确保线程安全 
一般说来,确保线程安全的方法有这几个:竞争与原子操作、同步与锁、可重入、过度优化

死锁:两个以上的进程互相要求对方已经占有的资源导致无法继续运行下去的现象
产生死锁的原因主要是:

(1) 因为系统资源不足。 
(2) 进程运行推进的顺序不合适。 
(3) 资源分配不当等。 
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 
其次,进程运行推进顺序与速度不同,也可能产生死锁。 


产生死锁的四个必要条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。 
  (1) 互斥条件:一个资源每次只能被一个进程使用。 
  (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
  (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 
  (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 
  这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 


解决死锁的4种处理策略:鸵鸟策略(即不理睬策略)、预防策略、避免策略、检测与解除策略: 
死锁预防:预先静态分配法(破坏不可剥夺条件)、资源有序分配法(将资源分类按顺序排列,保证不形成环路)。 
死锁避免:银行家算法(对每个资源请求进行检测,确保安全。需要很大的系统开销)。 
死锁检测:这种策略采用资源请求分配图的化简方法来判断是否发生了不安全状态。资源请求分配图是一种有向图, 
表示进程与资源之间的关系。死锁的检测是在需要的时刻执行的,当发现系统处于不安全状态时,即执行死锁的解除策略。 
死锁解除:资源剥夺法、撤销进程法。 




互斥量与临界区的区别: 
互斥量:不仅能在同一进程的不同线程之间实现资源共享,还能在不同进程的线程之间实现资源共享 
临界区:只限制在同一进程的线程之间资源共享
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值