进程调度

同一进程中的线程究竟共享哪些资源

最后都变了- 提交于 2019-12-04 01:00:37
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和 栈 ),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程; 同一个进程中的多个线程之间可以并发执行. 进程在执行过程中拥有独立的内存单元,而该进程的多个线程共享内存,从而极大地提高了程序的运行效率。 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 在很多现代操作系统中,一个进程的(虚)地址空间大小为4G,分为系统(内核?)空间和用户空间两部分,系统空间为所有进程共享,而用户空间是独立的,一般WINDOWS进程的用户空间为2G。 一个进程中的所有线程共享该进程的地址空间,但它们有 各自独立的(/私有的)栈(stack) ,Windows线程的缺省堆栈大小为1M。堆(heap

【linux】进程优先级、nice系统中的nice值和nice time,top中的PR和ps中的PRI

坚强是说给别人听的谎言 提交于 2019-12-03 23:05:00
背景知识 linux内核目前实现了6中调度策略(即调度算法), 用于对不同类型的进程进行调度, 或者支持某些特殊的功能, 其中SCHED_NORMAL和SCHED_BATCH调度普通的非实时进程, SCHED_FIFO和SCHED_RR和SCHED_DEADLINE则采用不同的调度策略调度实时进程, SCHED_IDLE则在系统空闲时调用idle进程. 字段 描述 所在调度器类 SCHED_NORMAL (也叫SCHED_OTHER)用于普通进程,通过CFS调度器实现。SCHED_BATCH用于非交互的处理器消耗型进程。SCHED_IDLE是在系统负载很低时使用 CFS SCHED_BATCH SCHED_NORMAL普通进程策略的分化版本。采用分时策略,根据动态优先级(可用nice()API设置),分配CPU运算资源。注意:这类进程比上述两类实时进程优先级低,换言之,在有实时进程存在时,实时进程优先调度。但针对吞吐量优化, 除了不能抢占外与常规任务一样,允许任务运行更长时间,更好地使用高速缓存,适合于成批处理的工作 CFS SCHED_IDLE 优先级最低,在系统空闲时才跑这类进程(如利用闲散计算机资源跑地外文明搜索,蛋白质结构分析等任务,是此调度策略的适用者) CFS-IDLE SCHED_FIFO 先入先出调度算法(实时调度策略),相同优先级的任务先到先服务

Android nice在进程与线程调度中的作用

大城市里の小女人 提交于 2019-12-03 23:03:56
基本概念: 进程:计算机进行资源分配和高度的基本单位,是程序运行的实体,也是线程的容器。 线程:是进程中实际执行的单元,是程序执行的最小单元,属于一个进程。 一个进程可以拥有多个线程。 nice在进程调试中作用 在Android中,可以使用nice值来设定一个进程的优先级,系统的调度器可以根据nice值来合理的调度进程,主要特点如下: 在Android中,nice的取值范围为-20~19 在Android中,nice值的默认大小为0 在Android中,nice值越大,进程的优先级越低,获得的CPU调用机会就越少;nice值越高,进程的优先级越高,获得的CPU调用机会越多 在Android中,父进程fork出来的子进程nice值与父进程相同,你进程renice后,子进程的nice值不会改变 如何更改进程的nice值 Android中可用如下命令更改进程的nice值, usage: nice [-n PRIORITY] command [args...] Run a command line at an increased or decreased scheduling priority. Higher numbers make a program yield more CPU time, from -20 (highest priority) to 19 (lowest). By

2019-2020-1学期 20192426 《网络空间安全导论》第五周学习总结

拟墨画扇 提交于 2019-12-03 15:31:36
第十章 操作系统 1.操作系统的角色 应用软件(application software) :帮助我们解决现实世界问题的程序。 系统软件(system software) :管理计算机系统并与硬件进行交互的程序。 操作系统(operating system) :管理计算机资源并为系统交互提供界面的系统软件。 一台计算机通常只有一个活动的操作系统,在系统运行中负责控制工作。计算机硬件是靠电线连接的,初始时载入永久存储器(ROM)中存储的一小组系统指令。这些指令将从二级存储器(通常是硬盘)中载入大部分系统软件。最终将载入操作系统软件的所有关键元素,执行启动程序,提供用户界面,系统就准备就绪了。这个过程就叫作引导计算机。术语“引导”来自于“靠自己的努力振作起来”这一思想,这也正是计算机开机后它所做的事情。 计算机可以具备两个或更多个操作系统,用户在计算机开机时可以选择使用哪个操作系统。这种配置称为双引导或多引导系统。不过,任何时候都只有一个操作系统在控制计算机。 内存、进程与CPU管理   多程序设计(multiprogramming) :同时在贮存中驻留多个程序,由它们竞争CPU的技术。 内存(memory management) :了解主存中载有多少个程序以及它们的位置的动作。 进程(process) :程序执行过程中的动态表示法。 进程管理(process management)

2019-2020-1学期 20192413 《网络空间安全专业导论》第五周学习总结

南笙酒味 提交于 2019-12-03 15:26:41
第十章 操作系统 10.1操作系统的角色 操作系统负责管理硬件资源,允许应用软件直接的或通过其他系统软件访问系统资源。它提供了直接的人机交互界面。 一台计算机通常只有一个活动的操作系统,在系统运行中负责控制工作。 操作系统的各种角色通常都围绕着一个中心思想“良好的共享” 10.1.1内存、进程与CPU管理 多道程序设计(multiprogramming):同时在主存中驻留多个程序,由它们竞争CPU的技术 内存管理(memory management):了解主存中载有多少个程序以及它们的位置的动作 所有现代操作系统都采用多道程序设计技术,因此,操作系统必须执行内存管理,以明确内存中有哪些程序以及它们驻留在内存的什么位置。 进程(process):程序执行过程中的动态表示法 进程管理(process management):了解活动进程的信息的动作 CPU调度(CPU scheduling):确定主存中的哪个进程可以访问CPU以便执行的动作 10.1.2批处理 程序和系统指令集合在一起称为作业 现代操作系统中的批处理概念允许用户把一组OS命令定义为一个批文件以控制一个大型程序或一组交互程序的处理。 10.1.3分时 分时(timesharing):多个交互用户同时共享CPU时间的系统 虚拟机(virtual machine):分时系统创建的每个用户都有专属机器的假象 主机

2019-2020-1学期 20192419 《网络空间安全专业导论》第五周学习总结 (读书笔记)

不打扰是莪最后的温柔 提交于 2019-12-03 11:50:53
第十章 操作系统 10.1 操作系统的角色 现代软件可以分为两类————应用软件和系统软件 应用软件: 帮助我们解决现实世界问题的程序。 系统软件:管理计算机系统并与硬件进行交互的程序。 操作系统:管理计算机资源并为系统交互提供界面的系统软件。 一台计算机通常只有一个活动的操作系统,在系统运行中负责控制工作。计算机硬件是靠电线连接的,初始时载入永久性存储器中存储的一小组系统指令。 计算机可以具备两个或者多个操作系统,这种配置称为双引导或多引导系统。 操作系统负责管理资源,而这些资源通常是由使用它们的程序共享的。多个并发执行的程序将共享主存,依次使用CPU,竞争使用输入/输出设备的机会。 10.1.1 内存、进程与CPU管理 正在执行的程序都驻留在主存中,其中的指令以读取-解码-执行这种周期性方式被一个接一个地处理。 多道程序设计:同时在主存中驻留多个程序,由它们竞争CPU的技术。 内存管理:了解主存中载有多少个程序以及它们的位置的动作。 进程:程序执行过程中的动态表示法。 进程管理:了解活动进程的信息的动作。 CPU调度:确定主存中的哪个进程可以访问CPU以便执行的动作。 10.1.2 批处理 在交付程序时,用户需要为执行程序所需的系统软件或其他资源提供一套单独的指令。程序和系统指令集合在一起,称为 作业 。 现在术语“批”表示的是一个系统,在这个系统中

2019-2020-1学期 20192420 《网络空间安全专业导论》第五周读书笔记

三世轮回 提交于 2019-12-03 11:48:28
第10章 操作系统 10.1 操作系统的角色 现代软件(反映了不同的程序设计目的) :即 应用软件与系统软件 两类。 应用软件(application software) :帮助我们解决现实世界问题的程序。 系统软件(system software) :管理计算机系统并与硬件进行交互的程序。 操作系统(operating system) :管理计算机资源并与系统交互提供界面的系统软件。 一台计算机通常只有 一个 活动的操作系统,在系统运行中负责控制工作。 任何时候都只有 一个操作系统 在控制计算机。 双引导或多引导系统 :计算机可以具备 两个或者更多个 操作系统,用户在计算机开机时可以选择使用哪个操作系统。 10.1.1 内存、进程与CPU管理 多道程序设计(multiprogramming) :同时在主存中驻留多个程序,由它们竞争CPU的技术。 内存管理(memory management) :了解主存中载有多少个程序以及它们的位置的动作。 进程(process) :程序执行过程中的动态表示法。 进程管理(process management) :了解活动进程的信息的动作。 CPU调度(CPU scheduling) :确定主存中的哪个进程可以访问CPU以便执行的动作。 操作系统自身也是 必须执行的程序 ,所以在内存中也要和其他系统软件及应用程序一起 管理和维护 OS进程。

[期末复习] 计算机操作系统复习(一)

青春壹個敷衍的年華 提交于 2019-12-03 11:14:06
操作系统期末复习 第一章-操作系统引论 操作系统的作用 作为计算机硬件系统之间的接口 系统资源的管理者 实现对计算机资源的抽象 操作系统的发展过程 未配置操作系统的计算机系统 人工操作,用户独占全机,资源浪费 脱机输入输出(Off-Line I/O)方式。 单道批处理系统 这里批处理指的是把很多作业放在一个磁带上,一次性输入给计算机 解决了人机矛盾(每执行一道程序都要手动装载)和cpu与I/O设备速度不匹配矛盾。提高了系统的吞吐量。 缺点:系统资源利用率低(I/O请求成功前CPU空闲)。 多道批处理系统 用户提交的作业都放在外存上,形成“后备队列”。 A在执行I/O请求时B进行作业,防止CPU空闲。 多道:从1和2可以看出内存中可以同时存在多个程序,故为多道。 好处:资源利用率高(显而易见,指CPU、存储器、设备和数据利用率高)、系统吞吐量大(指系统在单位时间完成的作业数量提升) 缺点:平均周转时间长、无交互能力 这里注意,提交任务是在外存形成队列,而执行时多道指的是内存中可以有多道程序运行。 分时系统 分时系统出现是为了满足人机交互的需求 分时:采用轮转方式,每隔一段时间片调度下一个作业运行。 分时系统的作业直接进入内存(要注意)。 关键问题:及时接受、及时处理。 实时操作系统 这个我们RM电控用的就是RTOS。 “实时”指的是“及时”而非“实时计算”。 实时系统规定了任务时间

彩票调度算法——让进程们拼手气?

不打扰是莪最后的温柔 提交于 2019-12-03 11:11:30
这篇文章主要想介绍下彩票调度(个人觉得这个算法非常有意思~ ),还有随机算法相对传统算法的一点优势,毕竟现在绝大多数算法都是追求 确定性 ,尤其在操作系统,大家都希望 一切可控 ,所以随机算法的出现听起来有些“不合时宜”,但它确实能够解决某些传统算法难以解决的 边角问题 (算是给自己挖个坑,以后可能会写),也为我们提供了一种新的思路。 以下是正文: 进程调度器今天突然召集大伙,说是要讨论一件重要的事情,问他他还卖关子:“你去了就知道,我现在不告诉你们。” 还没到约定时间,大伙儿就已经来到了内存家,只见进程调度器气定神闲的坐在椅子上,翘着个二郎腿,好不自在。 “调度器老哥,现在人也都来的差不多了,咱们现在就开始吧,早点结束大家伙儿好接着回去干活啊。” 调度器“嗯”了一声,起身走向白板,说:“我向大家先说明一下背景吧,咱们原来的调度算法,比如 先来先服务 , 短进程优先 , 优先级调度 等等, 大都是为了优化周转时间和响应时间 ,效果也还不错。不过这些算法,有些可能会导致 饥饿 的问题,我想不少进程深有体会。” tobe 注:关于这几种调度算法,可以看这篇文章—— https://www.cnblogs.com/tobe98/p/11604483.html 饥饿问题确实困扰操作系统很长时间了,虽然饥饿不如 死锁 那么有破坏力,但还是影响到了进程家庭内部的和谐。听调度器的意思

kernel task_struct

喜你入骨 提交于 2019-12-03 07:40:20
struct task_struct { struct thread_info thread_info; volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped: */ void *stack; /* 堆指针 */ atomic_t usage; /* 进程描述符使用计数,被置为2时,表示进 程描述符正在被使用而且 其相应的进程处于活动状态 */ unsigned int flags; /* Per task flags (PF_*), defined further below: */ unsigned int ptrace; /* ptrace系统调用,成员ptrace被设置为0时表示不需要被跟踪 */ /* SMP CPU: */ struct llist_node wake_entry; int on_cpu; /* 在SMP上帮助实现无加锁的进程切换 */ unsigned int cpu; /* end: */ unsigned int wakee_flips; unsigned long wakee_flip_decay_ts; struct task_struct *last_wakee; /* * recent_used_cpu is initially set as the last CPU