操作系统中进程和线程怎么通信

进程

进程是资源分配的最小单位,每个进程享有单独的内存空间
进程可以看成正在被执行的应用程序(executing program),线程放在进程里负责执行任何一部分应用程序的代码
进程之间通信:通过IPC机制(Inter Process Communication)

进程的概念:批处理系统,多道程序,地址重定位,分时系统,分块装入内存,虚拟内存:分页,分段+分页,程序的装载,线程;

1、批处理系统->多任务系统:刚开始任务是流水线处理的,来一个就处理一个;但是处理的过程是快速的(cpu速度极快),而装载数据到内存供cpu处理这个过程是极缓慢的。所以就产生了多任务系统,内存单独装载,cpu是一个就轮换处理。即系统里同时运行多个程序,多个程序同时输入装载数据,每个运行的程序叫进程,等待着cpu的调度

2、进程控制块PCB: 谁来控制哪个进程被cpu调用?操作系统维护一个进程控制块(PCB),并经常切换进程。

3、内存管理单元:多个进程共享内存产生了内存访问越界的问题?解决方法有静态重定位和动态重定位,最后产生内存管理单元来控制内存访问。

4、分时操作系统:如何防止某个进程长时间占用cpu导致其他进程迟迟得不到调用?系统定时切换进程。

由于程序内存占用量越来越大,产生了内存分块装载进内存的想法,同样是基于局部性原理。程序也可以比内存大得多。可以给每个程序一个超级大的虚拟空间,再通过MMU映射到真实内存地址上。操作系统维持一个页表,用来映射虚拟页面和物理页面。如果访问一个还没有被映射到物理内存的页面,就会产生缺页中断,操作系统负责到硬盘中调取。地址分成页号和偏移量,MMU负责完成地址的转换。CPU把最常用的页表放到缓存里,加快访问速度。

一个程序被分成了代码段,数据段和堆栈段,操作系统维护一个段表。在每个页的内部,仍然按分页来处理。地址也变成了段号+偏移量。程序非法访问内存,就会产生段错误(segmentation fault)。

装载器创建虚拟地址空间,用一个数据结构把程序的数据颌和代码在硬盘上的位置记录下来,操作系统为程序建立进程,进程开始。代码被读入内存并执行。运行完成,内存空间被清理,覆盖。

由于进程开销过大,在一个程序内部 可以使用多个线程共享进程的所有资源,其目的是像切换进程那样切换线程。程序员要注意不要让线程同时访问一个资源产生冲突。

线程

线程是CPU调度的最小单位
1、线程:就绪态、执行态
线程含有很多执行步骤。线程被执行时,先进入就绪态,被选中执行后就进入执行态,如果需要数据,或执行了一段时间,就切换至就绪态。如此反复,直到执行完毕。线程被回收销毁或进入线程池。
2、线程从缓存读数据
线程池从计算机启动进入操作系统后一直存在,直到重启或关机。尽量从缓存中读取数据,比从内存或者硬盘上读取数据快得多。
3、锁机制:多个线程访问同一个资源操作的问题?锁机制
两个线程对同一个资源进行操作,要先加锁锁住资源再操作,不然会产生冲突。对几个相关的资源进行操作,要按照一定的算法比较几个资源的大小,从最大的资源开始加锁。否则会产生几个线程互相等待,从而线程死锁。