计算机系统

进程和线程的区别

  • 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。
  • 线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
    一个进程可以有多个线程,多个线程也可以并发执行

线程同步的方式

  • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
  • 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
  • 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作

进程间通信的方式

  • 管道(PIPE):可用于具有亲缘关系进程间的通信,允许一个进程和另一个与他有共同祖先的进程之间进行通信
  • 命名管道(FIFO):克服了管道没有名字的限制,除了具有管道的功能外,还允许无亲缘关系的进程间通信,命名管道在文件系统中有对应的文件名,命名管道通过命令mkfifo或系统调用mkfifo来创建
  • 信号(signal):用于通知接收进程有某种事件发生,出了用于进程间的通信外,进程还可以发送信号给进程本身
  • 消息队列(MessageQueue):是消息的链接表,包括Posix消息队列和system V消息队列,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息,消息对了克服了信号承载的信息量少,管道只能承载无格式的字节流以及缓冲区大小受限等缺陷
  • 共享内存(shareMemory):多个进程可以访问同一块内存空间,往往与其他通信机制结合,如信号量,达到进程间的同步和互斥
  • 内存映射(mapped memory):内存映射允许多个进程间的通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它
  • 信号量(semaphore):作为进程间和同一进程不同线程间的同步手段
  • 套接口(socket):用于不同机器之间的进程间通信

缓冲区溢出

指当前计算机往缓冲区填充数据超过了缓冲区的大小,溢出的数据覆盖了合法数据

  • 程序崩溃,导致拒绝服务
  • 跳转并且执行一段恶意代码

死锁

在两个或多个并发进程中,每个进程持有某种资源而又等待其他进程释放他们持有的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁;通俗讲就是两个或多个进程无限期的阻塞,相互等待的一种状态。
死锁产生的4个条件:

  • 互斥条件:一个资源只能被一个进程使用
  • 请求与保持条件:一个进程因请求某种资源而阻塞时,对已获得资源保持不放
  • 不可剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
  • 循环等待条件:若干个进程之间形成一种头尾相接的环形等待资源关系

预防死锁:

  • 打破互斥条件:允许某些资源可以被多个进程同时访问
  • 打破请求与保持条件:实行资源预分配,进程在运行一次前一次性的申请他所需的全部资源,只有全部资源得到满足,进程才开始运行,否则暂不运行。但是这个有几个缺点:
    • 有些进程在运行之前不知道他所需的全部资源,这是由于进程在执行时是动态的,不可预测的
    • 资源利用率低,有些资源可能是进程最后才用到,但是在进程生存期间却一直持有,造成长期不用的情况,是一种极大的浪费
    • 降低了进程的并发性。因为资源有限,加上存在浪费,能分配到所有资源的进程必然就少了
  • 打破不可剥夺条件:当一个进程请求某种资源不能立即满足时,它应该立刻释放自己占有的全部资源。这种方法实现起来困难,会降低系统的性能
  • 打破循环等待条件:实行资源有序分配策略,事先将资源编号,按号分配,所有进程对资源的请求必须按照资源号递增的顺序,进程占用了小号资源才能申请大号资源
    • 限制了进程对资源的请求,但是同时给系统中所有的资源编号也是很困难的事,增加了系统的开销
    • 为了遵循按编号申请的次序,暂不使用的资源也要提前申请,增加了进程对资源的占用时间

银行家算法

1.银行家算法中的数据结构
  (1) 可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有R_j类资源K个。
  (2) 最大需求矩阵Max。这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要R_j类资源的最大数目为K。
  (3) 分配矩阵Allocation。这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得R_j类资源的数目为K。
  (4) 需求矩阵Need。这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要R_j类资源K个,方能完成其任务
上述三个矩阵间存在下述关系:
Need[i, j]=Max[i, j]-Allocation[i, j]
2.银行家算法
  设Request_i是进程P_i的请求向量,如果Request_i[j]=K,表示进程P_i需要K个R_j类型的资源。当P_i发出资源请求后,系统按下述步骤进行检查:
  (1) 如果Request_i[j]≤Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
  (2) 如果Request_i[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,P_i须等待。
  (3) 系统试探着把资源分配给进程P_i,并修改下面数据结构中的数值:
Available[j]:= Available[j]-Request_i[j];
Allocation[i,j]:= Allocation[i,j]+Request_i[j];
Need[i,j]:= Need[i,j]-Request_i[j];
  (4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程P_i,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程P_i等待。

3.安全性算法
  系统所执行的安全性算法可描述如下:
  (1) 设置两个向量:
  ① 工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work:=Available
  ② Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:=false;当有足够资源分配给进程时,再令Finish[i]:=true

(2) 从进程集合中找到一个能满足下述条件的进程:
  ① Finish[i]=false;
  ②Need[i,j]≤Work[j];若找到,执行步骤(3),否则,执行步骤(4)。

(3) 当进程P_i获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]:= Work[j]+Allocation[i,j]
Finish[i]:=true;
go to step (2);

(4) 如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态

同步与异步,阻塞与非阻塞

  1. 同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
    所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
  2. 阻塞与非阻塞
    阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
    阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容