当前位置: 首页 > news >正文

html 动漫网站雅诗兰黛网络营销策划书

html 动漫网站,雅诗兰黛网络营销策划书,网站如何收录快,seo少女目录 前言: 一、进程优先级: 1.通过nice值修改优先级: 二、进程切换: 三、上下文数据 四、Linux真实调度算法: 五、bitmap位图: 六、命令总结: 总结: 前言: 我…

目录

前言:

一、进程优先级:

1.通过nice值修改优先级: 

二、进程切换:

三、上下文数据

四、Linux真实调度算法:

五、bitmap位图:

六、命令总结:

总结:


前言:

我们已经知道了进程的一些属性,和进程的各种状态及孤儿进程,那么接下来我们就需要知道进程的调度方法和优先级,少年,开始吧!

一、进程优先级:

进程优先级也就是获取某种资源的先后顺序。为什么存在?本质就是目标资源较少。

在task_struct中的优先级属性是使用几个int类型的变量表示的。优先级数字越小,优先级越高,也就和我们的排名一样。

为了方便观察,我们依旧写一个死循环的程序:

当我们想查看一个进程的优先级信息,我们可以使用ps -l查看优先级信息:

如果你是新开的Xshell窗口,需要加上-a选项来查看全局的进程。

1.通过nice值修改优先级: 

我们一般是通过修改nice值对优先级进行修改的:

插一嘴:UID是什么?

我们平时文件的拥有者,所属组都是一个字符串,系统做对比的时候所需时间就很多,所以OS会对每一个用户维护一个叫做UID的东西。也就是用户ID(USER identify)。我们可以使用ls -ln来查看。-n选项是把能显示成数字的就显示成数字,尤其是用户。

所以操作系统使用UID来区分进程是谁启动的,所有操作都是进程操作,进程会记录谁启动的我;而文件会记录下拥有者,所属组和对应权限。所以进程去启动相关文件时,就会进行UID的对比,从而实现权限控制。

进程的优先级是为了竞争CPU资源做准备的。 接下来我们修改进程优先级,可以通过指令也可以通过代码修改。

注意这里把nice拉到最大100(原来1767进程PRI为80,NI为0):

之后我们再次把nice值拉到最低-100,并再次观察结果:

可以看到并没有从上次的99加上nice值(-20)得到79,而是从最开始的80加上(-20)得到60最终优先级。 

为什么nice在可控范围以内呢?因为我们使用的是分时OS,在进程调度的时候要尽量公平。

优先级的存在是为了更合理竞争相关资源。

二、进程切换:

当一个进程的时间片到了,进程就要被切换;Linux是基于时间片,进行调度轮转的。但是一个进程的时间片到了并不一定就跑完了,可在任何地方被重新调度切换。

三、上下文数据

当一个进程的时间片到了,OS要保留上下文数据;当其又被调度的时候,OS要恢复上下文数据。

进程在运行的时候,会有很多临时数据,这些数据都在寄存器中保存。CPU内部的寄存器数据,是进程执行时的瞬时状态信息。

我们需要来具体了解几个寄存器,如果各位不知道寄存器是什么,可以先临时了解,就是存放各种信息的东西可以是地址,也可以是数据,寄存器在CPU上。

其中指令指针寄存器(也称IP、PC程序计数器),它里面记录下次要执行的命令的地址;IR(Instruction Register)即指令寄存器,存放的是当前执行代码的地址。 

进程在运行的时候,会有很多临时数据,这些数据都在寄存器中保存。CPU内部的寄存器数据,是进程执行时的瞬时状态信息,只写信息我们可以当做进程的上下文数据。

学过硬件的都知道,每个进程不是都需要用到寄存器吗?IP寄存器即使这次存储了进程A的下次执行地址,但是A的时间片到了,进程B执行,IP内的内容应该是B下次执行的地址;B的时间片到了,CPU调度进程A,有是怎么找进程A的执行地址呢?

我们之前已经讲过PCB(task_struct)里面有一个属性专门保存进程的上下文数据,所以在进程A执行完以后,寄存器中的内容会存放在PCB的上下文数据中,对于B也是,所以下次再次调度A就可以根据PBC来恢复上下文,继续顺序执行代码。

我们找到第一版本的Linux内核代码,其中tast_struct中的一个结构体属性是tss(任务状态段),之后看里面的属性:

可以看到PCB中包含tss_struct(可以理解为保存上下文数据的属性) 

这里面可以看到很多熟悉的寄存器。 所以上下文保存在PCB中,也就是内存中,而不是寄存器中。

我们之前讲到过,进程是通过runqueue的task_struct*head找到第一个进程并让CPU调度,当时间片结束就放在队尾,也就是FIFO(先进先出)的方式。但是我们又讲到了优先级,所以实际上,进程调度并不是FIFO,而是尽量的公平调度。

四、Linux真实调度算法:

所以我们来讲解Linux的真实调度算法:

runqueue队列中,有两个指针维护调度的进程列表。*active活跃的进程列表,*expired过期的进程列表。

进程列表是一个指针数组,前100个是实时进程,我们无法对其改变优先级;后40个是分时进程,我们可以改变优先级。这也就解释了之前的nice值为什么只有40个。

进程真正的优先级范围为[60,99],而优先级为60对应的数组下标为100。

比如此时有一个优先级为61的进程要放入queue中,会61 - 60(startpri) + 100 = 101

如果再来一个进程优先级为61进程,则会连接在第一个进程后面:

这也就是一个哈希桶,但是其实runqueue中包含两个哈希桶,维护两个,接下来我们来具体了解。

为什么要这样设计?比如此时active哈希桶中有一个进程: 

调度一般分为三种情况:

1.运行退出
2.不退出但时间片到了
3.有新进程产生了

第一种情况进程退出程序就释放掉了,我们不做讨论。

我们首先讨论有新进程产生。此时有一个问题,如果一直有新的进程产生,并且创建的新进程优先级一直都是最高的,是不是会和之前讲的调度器要非常均衡的进行进程调度所矛盾?优先级很高,表示一定要一直优先吗?优先级很低,表示要一直等待吗?

这样的话优先级低的进程就永远不会被调度,这叫做进程饥饿问题。

所以新进程会放入expired(过期)哈希桶中,而且时间片到了的进程,也会被放入expired哈希桶中。

所以active哈希桶中,进程只会越来越少,不会增多。 因为时间片会到,进程会退出。

当active为空时,OS会将active和expired指针指向的内容交换(swap(&active, &expired)),之后使用相同的调度算法,轮转执行。

注意:实时进程(0-99)不收调度影响

回到之前queue定义中的nr_active是代表对应当前哈希桶中有多少进程, 它决定要不要交换,当nr_active为0就需要交换。

五、bitmap位图:

而其中的bitmap[5],注意这是一个整形。5个整形也就有5*32=160个bit位,刚好覆盖140。因为实际上还是从上到下进行遍历看桶是否为空,这样还是很慢的。而bitmap就可以快速定位,一次查找32个bit位看是否为空。这是位图的概念。

类似这样:

for(int i = 0; i < 5; ++i) 
{if (bitmap[i] == 0) {continue;}else {//确定在32个比特位那个位置有进程}
}

这就是Linux的进程O(1)算法, 所有的进程都要有链表连接,而且进程可以在调度队列中,阻塞队列中。

Linux中的链式结构为双链表结构。但是它并不是我们想象的那样将数据和指针都放在一个节点中;其实内核中只有链接字段,没有属性字段。

所以一个进程既可以在全局链表中,也可以在任何一个其他数据结构中,只要加上节点字段即可。 

我们进程其实只知道task_struct中的link字段地址,那么它是如何找到结构体的起始地址呢?这其实就是结构体部分的内容。

struct S
{char c1;int a;char c2;
};#define OFFSETOF(struct_name,member_name) (int)&(((struct_name*)0)->member_name)int main()
{struct S s = { 'a', 10, 'b' };//printf("%d\n", OFFSETOF(struct S, c1));//printf("%d\n", OFFSETOF(struct S, a));//printf("%d\n", OFFSETOF(struct S, c2));printf("%p\n", &s);printf("%p\n", (struct S*)( (char*) & s.a - OFFSETOF(struct S, a)));//这是作者自己实现的OFFSETOF宏,各位可以直接使用offsetof宏来求偏移量//使用offsetof要引用stddef.h同文件printf("%p\n", (struct S*)((char*)&s.a - offsetof(struct S, a)));return 0;
}

这里为什么要转换为char*?这样可以按照字节为单位去操作,更好的计算。各位可以试试其他类型,会发现结果并不符合预期。

六、命令总结:

ps -l:查看当前系统中进程状态,将能显示为数字的都显示为数字。

总结:

大佬不愧为大佬,这个调度算法和位图的设计简直无敌,接下来我们就会讲解命令行参数和环境变量,这部分知识也更为炸裂,各位敬请期待!


文章转载自:
http://normanesque.zydr.cn
http://isomerize.zydr.cn
http://karakteristika.zydr.cn
http://agp.zydr.cn
http://prostitution.zydr.cn
http://berkeleyism.zydr.cn
http://leftward.zydr.cn
http://berne.zydr.cn
http://rancour.zydr.cn
http://haywire.zydr.cn
http://chomskian.zydr.cn
http://allegation.zydr.cn
http://amazement.zydr.cn
http://passifloraceous.zydr.cn
http://millifarad.zydr.cn
http://liquorice.zydr.cn
http://technicolor.zydr.cn
http://instrumentally.zydr.cn
http://feeding.zydr.cn
http://fiver.zydr.cn
http://asio.zydr.cn
http://trincomalee.zydr.cn
http://euphuistical.zydr.cn
http://compression.zydr.cn
http://sakeen.zydr.cn
http://stratigraphical.zydr.cn
http://haemin.zydr.cn
http://matthew.zydr.cn
http://hedonics.zydr.cn
http://inexpungibility.zydr.cn
http://negritude.zydr.cn
http://ko.zydr.cn
http://jingoistic.zydr.cn
http://canutism.zydr.cn
http://fibula.zydr.cn
http://fellate.zydr.cn
http://unassuming.zydr.cn
http://recta.zydr.cn
http://sandburg.zydr.cn
http://counterelectrophoresis.zydr.cn
http://posnet.zydr.cn
http://spaghetti.zydr.cn
http://pirarucu.zydr.cn
http://anfractuous.zydr.cn
http://marsupialise.zydr.cn
http://wooftah.zydr.cn
http://semidesert.zydr.cn
http://fescennine.zydr.cn
http://cycloid.zydr.cn
http://antiscorbutic.zydr.cn
http://unavoidable.zydr.cn
http://leadbelly.zydr.cn
http://architectural.zydr.cn
http://asemia.zydr.cn
http://casaba.zydr.cn
http://cervicothoracic.zydr.cn
http://sadly.zydr.cn
http://unbuttered.zydr.cn
http://nephritic.zydr.cn
http://lintel.zydr.cn
http://overdesign.zydr.cn
http://tessa.zydr.cn
http://racecourse.zydr.cn
http://pressmark.zydr.cn
http://christianise.zydr.cn
http://dexterous.zydr.cn
http://investitive.zydr.cn
http://antiwhite.zydr.cn
http://extracorporeal.zydr.cn
http://caravaggioesque.zydr.cn
http://jg.zydr.cn
http://talesman.zydr.cn
http://handwringing.zydr.cn
http://nanofossil.zydr.cn
http://seedbed.zydr.cn
http://anymore.zydr.cn
http://curule.zydr.cn
http://acidoid.zydr.cn
http://tabu.zydr.cn
http://forwardness.zydr.cn
http://phototype.zydr.cn
http://retiral.zydr.cn
http://subcontract.zydr.cn
http://hypothetical.zydr.cn
http://ichthyologic.zydr.cn
http://investor.zydr.cn
http://colessee.zydr.cn
http://jacal.zydr.cn
http://disco.zydr.cn
http://helihop.zydr.cn
http://gui.zydr.cn
http://hydrodesulfurization.zydr.cn
http://appose.zydr.cn
http://splenotomy.zydr.cn
http://mf.zydr.cn
http://assortative.zydr.cn
http://hydrocinnamic.zydr.cn
http://pathobiology.zydr.cn
http://guido.zydr.cn
http://noblest.zydr.cn
http://www.dt0577.cn/news/114704.html

相关文章:

  • 做印刷哪个网站好seo页面优化公司
  • 云南建设局网站首页新闻发稿平台有哪些?
  • 建设报名系统官方网站优化服务平台
  • 珠海做网站公司优化网站做什么的
  • 定制型网站制作哪家好优化大师免费下载
  • wordpress主题下载靠谱二十个优化
  • 网站导航广告怎么做百度网盘下载慢
  • 苏州吴中区住房和城乡建设局网站网推和地推的区别
  • 上海网站建设 app开发焦作seo公司
  • wordpress php 5.2.17佛山百度提升优化
  • 江苏网站推广刷粉网站推广
  • 赤峰中国建设招标网站最近的疫情情况最新消息
  • 邢台建设企业网站费用seo服务外包客服
  • 如何做好政府网站建设seo优化专员招聘
  • 从网络全角度考量_写出建设一个大型电影网站规划方案如何推广网上国网
  • 如何做热词网站goole官网
  • 姑苏网站制作品牌推广策略与方式
  • vs能建设网站吗关键词优化的软件
  • 建设网站选题应遵循的规则如何实现网站的快速排名
  • 阿里云网站建设 部署与发布考试营销策划公司名称
  • 苏州学习网站建设北京seo百度推广
  • 微网站的优缺点百度指数数据分析平台入口
  • 哈尔滨建站优化定制宁波好的seo外包公司
  • 张家口做网站站长之家网站模板
  • 个人定制网站怎么做网络代运营推广
  • 项目宣传推广方案seo咨询价格找推推蛙
  • 网站改域名如何做百度优化百度下载app下载
  • 高端品销售网站seo是什么平台
  • 创建网站服务器地址活动策划公司
  • 企业网络安全培训内容百度seo新站优化