进程与线程基本解释
- 进程是系统资源分配的单位和cpu调度单元
- 一个进程是一个实体,相当于一段运行的程序而线程则是这一段程序的一个单一顺序的控制流
- 线程是操作系统能够进行运算调度的最小单元是进程的实际作用单元
用java来深入了解进程与线程
下面是一段java创建线程类的代码
public class MyThread extends Thread{ //继承Thread类
public MyThread(){}
public MyThread(String name){
super(name);
}
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
调用MyThread类 创建两个线程,setName相当于一个进程 包含两个线程
public class setName{
public static void main(String[] args) {
MyThread mt=new MyThread();
mt.setName("小强");
mt.start();
//开启多线程
new MyThread("山山").start(); //start()为开启线程,执行run中的代码部分
}
}
进程和线程的深入总结
- 当一个进程要开始执行时要先进入内存中,因为内存是通过时间片管理来交替执行线程的所以所以每个线程都有几种状态。
1.新建状态(New): 线程对象被创建后,就进入了新建状态。例如, Thread thread = new Thread()。
2.就绪状态(Runnable):
也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。
3. 运行状态(Running): 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
4. 阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: (01) 等待阻塞
– 通过调用线程的wait()方法,让线程等待某工作的完成。 (02) 同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。 (03) 其他阻塞 –
通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5. 死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
- 说到这里就需要了解一下PCB(process control block)进程控制块,他是进程实体的一部分,是操作系统中最重要的记录性数据结构。每一个进程都有一个PCB,随着进程的创建而创建,撤销而撤销。是感知进程存在的唯一标识。
- 进程的开始都伴随着资源的抢夺,例如cup的使用权、外设的使用,这时就有了信号量,信号量的作用是保证两个或多个关键代码段不被并发调用它可以用来表示资源的个数,信号量的数值只能由p、v原语操作改变。
- p原语表示申请一个资源使得信号量-1,v原语则相反。例如信号量为S,当对信号量进行P原语操作时S-1,当S<0时表示资源都被占用了这是调用进程在该信号量对象的阻塞队列(一种资源对应一个阻塞队列,上文状态中提到)中睡眠,当S>=0时可以申请到一个资源。
- v原语表示释放或增加一个资源。
- 进程又可以分为同步的与互斥的,进程的同步是指进程之间的一种直接的协同工作关系,一些进程相互合作,共同完成一项任务。进程之间的同步也是进程间的一种直接制约关系,一个进程的执行依赖另一个进程的消息,当一个进程执行到某一点时,必须得到另一个进程发来的消息,有没有得到另一个进程的消息时该进程应该等待,直到消息到达才被唤醒,继续进程的执行。进程的互斥在系统中,许多进程常常需要共享资源,而这些资源往往要求排他性的使用,即一次只能为一个进程服务。因此,各进程只能互斥使用这些资源,进程之间的这种关系就是进程的互斥。
- 临界资源是指那些一次只能被一个进程所占用的资源。对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区
通过计算机底层了解进程与线程
进程也就是计算机指令的集合,执行指令的过程
- pc=0指向第一条指令的存储地址
- 把pc的值传给MAR,使(MAR) 地址存储器=0
- 通过MAR的值去存储体中找到改地址存储的操作码与地址码,传给MDR(主存数据存储器)
- MDR把二进制数传给cup中的IR(指令存储器)
- 把IR中的操作码传给控制单元CU,CU分析操作码的内容得知000001是取数指令
- 把IR中的地址码传给MAR,让MAR去存储体中找到地址码对应的值
- 把找到的值给MDR,MDR再传到ACC(累加器)中
本文详细介绍了操作系统中的进程与线程概念,包括进程作为资源分配和CPU调度的基本单位,线程作为执行实体。通过Java展示了进程和线程的创建与状态转换,强调了线程的五种状态:新建、就绪、运行、阻塞和死亡。同时,讨论了PCB、信号量、同步与互斥等概念,深入探讨了进程控制和资源管理的底层原理。
1万+

被折叠的 条评论
为什么被折叠?



