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

重庆网站制作特点优势/搜狐财经峰会

重庆网站制作特点优势,搜狐财经峰会,重庆网站建设首选卓光,海南省建设信息官方网站目录: 一、概述: 存储体系的构成: 存储管理的目的: 存储管理的任务: 程序的连接与装入: 存储管理方式分类: 二、连续存储管理方式: 单一连续分配: 分区分配: 可…

目录:

一、概述:

存储体系的构成:

存储管理的目的:

存储管理的任务:

程序的连接与装入:

存储管理方式分类:

二、连续存储管理方式:

单一连续分配:

分区分配:

可变分区的分配与回收:

紧凑:

三、覆盖技术与交换技术:

覆盖技术:

交换技术:

四、分页存储管理方式:

工作原理:

动态地址变换:

快表:

两级和多级页表:

分配与回收:

五、分段存储管理方式:

工作原理:

动态地址变换:

存储保护:

分页和分段的主要区别:

六、段页式存储管理方式:

基本原理:

地址结构:

地址变换:


一、概述:

存储体系的构成:

——计算机系统中存储器一般分为主存储器辅助存储器两级。

  • 主存储器简称主存,又称为内存,由顺序编址的单元(通常为字或者字节)所组成,是处理机直接存取指令和数据的存储器速度快,但是容量有限
  • 辅助存储器简称辅存,又称为外存,由顺序编址的“块”组成,寻址与交换均以块单位进行,处理机不能直接访问它,需要经过专门的启动I/O过程与内存交换信息;存取速度较慢,但是容量远大于内存

——内存可以分成系统区用户区两部分。

  • 系统区用来存储操作系统等系统软件。
  • 用户区用于分配给用户作业使用。

存储管理的目的:

为用户提供方便(逻辑地址和物理地址分开,地址之间的转换由操作系统完成)、安全同时进入内存的用户进程间互不干扰)和充分大的存储空间利用虚拟存储技术从逻辑上扩充内存,使得较小内存但是可以运行较大的程序) 。


存储管理的任务:

①地址转换:

——逻辑地址:用户源程序经过编译或者汇编后形成的目标代码中出现的地址,通常是相对地址形式;即规定目标程序的首地址为零,而其他指令中的地址部分都是相对于首地址而定的,这里的地址通常称为逻辑地址,也称为相对地址。就用户程序而言,其逻辑地址构成的空间称为逻辑地址空间或者简称为地址空间

——物理地址:内存中各存储单位的编号称为物理地址,也称为绝对地址。就系统而言,内存的全部物理单元的集合被称为内存空间,也称为物理空间绝对空间

 

②内存的分配和回收:

——当用户作业要装入内存时,需向操作系统提出申请,操作系统按一定策略分配内存空间;若某作业执行完毕,需归还内存空间时,操作系统负责回收内存。

 

③内存的地址保护:

——为避免内存中若干道程序相互干扰,尤其是为了防止用户程序侵犯系统程序所在的内存区域,必须对内存采取保护措施 ,内存的地址保护功能一般由硬件和软件配合实现

——当要访问内存的某一个单元时,首先硬件检查是否允许访问。若允许,则执行;否则产生中断,由操作系统进行相应的处理。

——对于不同结构存储器,采用的保护方法不一。

 

④内存的共享:

——为提高内存利用率,需要进行内存空间的共享,包括两方面的含义:

  • 共享内存资源(即:多道程序在内存并发)
  • 共享内存的某些区域(即:共享代码段或数据段)

 

⑤内存的逻辑扩充:

——内存的扩充不是硬件设备上的扩充,而是用虚拟技术来实现的逻辑上的扩充,即虚拟存储概念。


程序的链接与装入:

一个用户源程序变成可以在内存中执行的程序,需要进行以下三步:

——编译:由编译程序将用户源代码编译为若干个目标模板。

——链接:由链接程序将编译之后的目标模板以及它们所需要的库函数链接在一起,形成一个装入模板。

——装入:由装入程序将装入模板装入内存。

 

程序的链接:

静态链接方式——在程序运行以前,将各个目标模块及它们所需要的库函数,链接成一个完整的装入模块,又可称为可执行文件,通常不再拆开。

使用该方法需要解决两个问题:

  • 问题一:对于目标模板中的相对位置进行修改。在编译程序所产生的的所有的目标模板中,使用的都是相对于本模板起始地址0的相对地址。在连接成为一个装入模板之后,需要把地址更改为相对于装入模板起始地址0的新的相对地址。

  • 问题二:变换目标模板中外部调用符号。将每个目标模板中所用的外部调用符号也都变换为相对于装入模板起始地址0的相对地址。
程序连接示意图

装入时动态链接——用户源程序经编译后所得的目标模块,在装入内存时,边装入边链接,即在装入一个目标模块时,如果发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存,进行链接。

  • 优点:①便于修改和更新。②便于实现对目标模块的共享。

运行时动态链接——这种链接方式是将对某些模块的链接推迟到执行时才进行。在执行过程中,当发现一个被调用模块尚未调入内存时,立即由操作系统去找到该模块并装入内存,再把它链接到调用者模块上。

  • 凡在执行过程中未使用到的目标模板,都不会调入内存和链接到装入模板上,这样不仅可以提高装入的速度,还可以节省大量的内存空间。

 

程序的装入(三种方式):

绝对装入方式(绝对地址与物理地址相同):逻辑地址转换成物理地址的过程发生在程序编译或汇编时, 必须将程序装入到内存固定的位置。

可重定位装入方式(静态重定位):逻辑地址转换成物理地址的过程发生在程序装入到内存时进行。装入后地址不能再变,因此程序不能移动。

静态重定位示意图

动态运行时装入方式(动态重定位):逻辑地址转换成物理地址的过程推迟到程序真正执行时。可以通过重定位寄存器实现。

  • 程序和数据所在存储区的起始地址送入重定位寄存器中。在程序执行时,用逻辑地址加上重定位寄存器中的地址得到相应的物理地址。
动态重定位示意图

存储管理方式分类:

 

二、连续存储管理方式:

单一连续分配:

基本思想:

——内存的用户区一次只分配给一个作业使用。

单一连续分配示意图

存储保护机制:

——基址寄存器界限地址寄存器(但是有时会省掉,譬如:CP/M、MS-Dos等单用户操作系统就未设置存储器保护机制)。

特点:

——内存的分配、去配算法简单;内存的利用率很低(因为一个程序往往只占有内存的一部分,剩余部分只能空闲未被利用。)。


分区分配:

分区分配的存储管理是为了适应多道程序设计技术而产生的最简单的管理方式。它将内存划分为若干个连续的区域,每个用户程序占有一个。根据分区情况,又可分为固定分区和可变分区(动态分区)。

固定分区:

——基本思想:

系统预先把内存中的用户区分成若干个连续的区域,每个区域称为一个“分区”。各个分区的大小可以相同或者不同,为了满足不同的存储需求,更好的利用内存空间,通常把各分区划分成不同大小的连续区域。

作业装入时,根据它对内存大小的需求量,系统将按照一定的策略,把能满足它要求的一个分区分配给该作业。

——分配与回收:

固定分区分配表,内容包括分区号、起始地址、长度、占用标志(记录该分区的使用状态)等。

固定分区分配表

——存储保护机制:

设置上、下限寄存器或者设置基址、长度寄存器

——优缺点:

优点:简单易行,尤其是对于程序的大小预先可以知道的专用系统。

缺点:内存使用不充分,程序的大小受到分区大小的限制。

 

可变分区分配:

——基本思想:

系统并不预先划分内存区间,而是在作业装入时根据作业的实际需要动态地划分内存空间。若无空闲的存储空间或无足够大的空闲存储空间供分配时,则令该作业等待

——分配中的数据结构:

常用的数据结构有已分分区表空闲分区表或空闲分区链表。

  • 已分分区表:记录当前已经分配给用户作业的内存分区,包括分区序号、开始地址、分区大小等信息。(记录已经使用了的空间)
  • 空闲分区表:记录了当前内存中空闲分区的情况,包括分区序号、开始地址、分区大小。(记录未分配使用的空间)
  • 空闲分区链表:将空闲分区组织成为链表的形式
已分分区表、空闲分区表和空闲分区链表

 ——可变分区示例:


可变分区的分配与回收:

可变分区分配算法:

——首次适应算法:

原理:要求空闲分区链以地址递增的次序链接,在进行内存分配时,从链首开始顺序查找,直至找到一个能满足其大小要求的空闲分区为止。

特点:该算法倾向于优先使用内存中低址部分,为的是保留了高址部分的大空闲区,为得是以后为大程序分配大内存空间。

缺点:每次都是在低址部分划分区域,所以会留下许多难以利用、很小的空闲分区,被称为内存碎片。而且每一次的查找都是从低址部分开始的,会增加查找可用空闲分区的开销

——循环首次适应算法:

在为作业分配内存空间时,不再每次从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找。直至找到第一个能满足要求的空闲分区。

——最佳适应算法:

把既能满足要求、又是最小的空闲分区分配给作业。为了加速查找到适用的最小空闲分区,该算法会将所有的空闲区按照分区的大小以递增的顺序形成一空闲分区链表

但是这个算法也存在一个弊端——每次分配空闲空间之后所切割下的剩余部分总是最小的,更容易形成内存碎片

——最差适应算法:

每次为作业分配内存时,总是找到一个满足作业长度要求的最大空闲分区进行分配。这样剩下来的空闲区不至于太小而形成内存碎片。

这种算法适用于中、小程序;但是对于大程序的运行来讲是不利的。(因为你每次都将大的空闲空间用掉,这样下去当你想让大程序进入内存的时候就很难找到放的下的内存空闲空间了!)

 

可变分区分配操作:

  • 设请求的分区大小为u.size,表中每个空闲分区的大小可表示为m.size。
  • 系统要利用某种分配算法(首次、循环首次、最佳、最差),从空闲分区表/链中找到所需的适合分区。
  • 若m.size-u.size小于系统规定的最小值,则将整个分区分配给请求者;否则从该分区中划分出与请求的大小相等的内存空间分配出去。余下的部分仍留在空闲分区表或空闲分区链中。修改相应的数据结构。
  • 将分配区的首址返回给调用者

 

分界线————————————————————————————————————分割分配与回收操作!

 

可变分区回收操作:

当作业运行完毕释放内存时,系统根据回收区的首址,从空闲分区表(链)中找到相应的插入点,进行回收,此时可能出现以下四种情况(个人理解:有相邻则合并,无相邻则单独为一区!):

——回收区与插入点的前一个分区相邻接,两分区合并。

——回收区与插入点的后一个分区相邻接 ,两分区合并。

——回收区同时与插入点的前、后两个分区邻接 ,三分区合并。

——回收区与插入点前、后两个分区都不相邻 ,单独一个分区。

可变分区回收示意图

 

可变分区内存回收算法:

假定作业归还的分区起始地址为S,长度为L,则:

——归还区有下邻空闲区:如果S+L正好等于空闲区表中某个登记栏目(假定为第j栏)的起始地址,则表明归还区有一个下邻空闲区。

  • 这时只要修改第j栏登记项的内容: 起始地址=S; 第j栏长度=第j栏长度+L。

——归还区有上邻空闲区:如果空闲区表中某个登记栏目(假定为第k栏)的“起始地址+长度”正好等于S,则表明归还区有一个上邻空闲区。

  • 这时要修改第k栏登记项的内容(起始地址不变): 第k栏长度=第k栏长度+L;

——归还区既有上邻空闲区又有下邻空闲区:如果S+L正好等于空闲区表中某个登记栏目(假定为第j栏)的起始地址,同时还有某个登记栏目(假定为第k栏)的“起始地址+长度”正好等于S,这表明归还区既有一个上邻空闲区又有一个下邻空闲区。

  • 此时对空闲区表的修改如下: 第k栏长度=第k栏长度+第j栏长度+L;(第k栏起始地址不变) 第j栏状态=“空”;(将第j栏登记项删除)

——归还区既无上邻空闲区又无下邻空闲区:如果在检查空闲区表时,无上述三种情况出现,则表明归还区既无上邻空闲区又无下邻空闲区。这时,应该在空闲区表中查找一个状态为“空”的栏目(假定查到的是第t栏)。

  • 则第t栏的内容修改如下:     第t栏起始地址=S;     第t栏长度=L;     第t栏状态=“未分配”
可变分区的回收算法

 

可变分区分配的优缺点:

——优点:有助于多道程序设计,提高了内存的利用率、要求硬件支持少,代价低、管理算法简单,实现容易。

——缺点:必须给作业分配一连续的内存区域、碎片问题严重,内存仍不能得到充分利用、不能实现对内存的扩充。

 

为了处理内存碎片问题,设计人员引入了紧凑机制!

 


紧凑:

定义:通过移动,把多个分散的小分区拼接成大分区的方法被称为紧凑。

代价与时间:紧凑的开销很大(毕竟要移动内存中所有的进程,修改进程的地址信息),当系统中每个空闲区域单独均不能满足,但所有空闲区域之和能够满足时(这样才值得),才进行一次紧凑。

注意:由于经过紧凑之后,进程在内存中的位置发生了改变,若不对程序和数据的地址进行修改,则进程将无法运行。为了使之执行,必须进行重定位,即用新的开始地址替换重定位寄存器中原来的位置

 

三、覆盖技术与交换技术:

覆盖技术:

定义:所谓覆盖,是指同一内存区可以被不同的程序段重复使用

——可以相互覆盖的程序段叫做覆盖

——可共享的内存区叫做覆盖区

——把程序执行时并不要求同时装入内存的覆盖组成一组,叫覆盖段,并分配同一个内存区

覆盖示例

实现:为了实现覆盖管理,系统必须提供相应的覆盖管理控制程序

  • 覆盖技术的关键是提供正确的覆盖结构 。

特点:打破了必须将一个作业的全部信息装入内存后才能运行的限制,在一定程度上解决了小内存运行大作业的矛盾。


交换技术:

用于多道程序环境,可以提高各作业的响应时间。

定义:所谓交换,就是系统根据需要把内存中暂时不运行的某个(或某些)作业部分或全部移到外存,而把外存中的某个(或某些)作业移到相应的内存区,并使其投入运行。

交换的时机通常在以下情况发生:

——作业的进程用完时间片或等待输入输出

——作业要求扩充存储而得不到满足时。

实现:

通常把辅存分为文件区交换区文件区用于存放文件交换区用于存放从内存中换出的作业(进程)。在交换区的作业驻留时间是短暂的,交换操作又较为频繁,所以对交换区管理的主要目的是提高作业的换入换出速度,故对交换区采用连续分配方式。

交换技术的关键是设法减少每次交换的信息量。为此,常将作业的副本保留在外存,每次换出时,仅换出那些修改过的信息即可。

特点:

——交换技术也是利用辅存来逻辑地扩充内存。

——打破了一个程序一旦进入内存便一直运行到结束的限制

 

四、分页存储管理方式:

工作原理:

基本思想:

作业地址空间和存储空间按相同长度为单位进行等划分。把每个作业的地址空间(逻辑空间)分成一些大小相同的片段,叫做页面

内存的存储空间也分成大小与页面相同的片段,叫做物理块页框。分配给作业的物理块可以连续也可以不连续

分页管理示意图

页面大小选择:

——若选择的页面较小;可以减少页内碎片的总空间,有利于提高内存的利用率(优点);但是在另一方面管理不便,页表过长,占用大量的空间(缺点)

——若选择的页面较大;可以减少页表的长度,提高换进换出的效率(优点),但是会使得页内碎片增大(缺点)

——页面的大小要选择得适中。通常页面的大小是2的幂,且常在2^{9}2^{12}之间,即在512字节-4K字节之间。

——在分页系统中页面的大小是由机器的地址结构所决定的,亦即由硬件决定。对于某一种机器只能采用一种大小的页面。

 

页表:

——页表的作用是实现从页号到物理块号的映射

——系统在内存空间设置一片区域作为页表区,系统为每个进程提供一个页表。进程页表的起始地址存放在进程PCB中。

页表

 

存取控制:

在页表的表项中设置一存取控制字段, 用于对该存储块中的内容进行保护。 (1或2个二进制位用于表示:读/写、只读、只执行等)


动态地址变换:

地址结构:

——逻辑地址可以分解成:页号、页内位移量(页内地址)

——物理地址可以分解成:物理块号、物理块内位移(物理块内地址)

分页存储中的地址结构

地址变换:

地址变换即通过地址变换机构把逻辑地址变换成相应的物理地址实际上是将逻辑地址中的页号,转换为内存中的物理块号。因为页表的作用就是用于实现页号到物理块号的变换,因此,地址变换任务是借助于页表来完成的。

除此以外,系统设置了一个页表寄存器PTR其中存放页表在内存的始址和页表的长度。

地址变换过程:

⑴ 根据逻辑地址计算出页号 p 和页内地址 d。

  • p = 逻辑地址/页面大小

  • d = 逻辑地址%页面大小

⑵ 根据页号 p 查页表,得到对应块号 f 。

⑶ 块内地址和页内地址相同,计算物理地址:

  • 物理地址 = f × 块大小 + d (块大小 = 页大小)

 

分页存储管理的地址保护:

整体过程:当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动将逻辑地址分为页号和页内地址两部分——>再以页号为索引去检索页表。

具体过程:在执行检索之前,先将页号与页表寄存器中页表长度进行比较——>

  • (路径一)如果页号大于或者等于页表长度,则说明本次所访问的地址已越界。——>于是,这一错误将会被系统发现并产生一个地址越界中断。
  • (路径二)若没有出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置。——>于是可以得到该页的物理块号,将其装入物理地址寄存器中——>与此同时,再将逻辑地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中。——>至此,完成了逻辑地址到物理地址之间的转换。

下面举一个实际的例子对上面的转换机制进行说明!

 

计算举例:

在分页存储管理系统中,允许作业最大64KB,页面大小为4096字节。现有一作业共3页,且第0、1、2页依次存放在物理块5、10、11中,问该作业的逻辑地址2F6AH相应的物理地址是多少?

分析:

块内地址==页内地址  块大小==页大小。

假设为块大小2n字节,则页内地址和块内地址占n位。

若作业最大为2s字节,则逻辑地址的位数为s位。

逻辑地址的低n位为页内地址,高s-n位为页号。

物理地址的位数为t,则内存空间最大为2t字节。

物理地址的低n位为块内地址,高t-n位为块号。

解答:由题目所给条件可知,分页存储管理系统的逻辑地址结构为:

由此可知逻辑地址2F6AH的页号为2,小于页表长度3,没有越界,该页存放在第11个物理块中,用十六进制表示块号为B,所以物理地址为BF6AH。


快表:

引入原因:由于页表存储在内存中,所以当要按照给定的逻辑地址进行读/写时,需要两次访问内存:

——第一次是根据页号访问页表,读出页表相应表项中的块号以便形成物理地址。

——第二次是根据物理地址进行读/写操作

  •  这样比通常执行指令的速度慢一倍
  • 为了提高存取速度,在地址变换机构中增设了一个具有并行查寻能力的特殊高速缓冲存储器,又称为“联想存储器”“快表”

 

利用快表进行读/写操作的过程:

——首先按逻辑地址中的页号先查快表,若该页在快表中,则立即能得到相应的物理块号并与页内地址形成物理地址

——若该页不在快表中,则再查内存中的页表找到相应的块号,形成物理地址,同时将该页的对应项写入快表

——若快表已满,则按照一定策略淘汰一个旧项。最简单的策略是“先进先出”原则,即淘汰最先进入快表的那一项。

利用快表的地址变化机构

快表的地址映象及其操作: 

快表的地址映象及其操作

两级和多级页表:(个人理解:就是一个嵌套思想,页表的页表... ...)

引入原因:

——现代的大多数计算机系统都支持非常大的逻辑地址空间,此时,页表就变得非常大,要为它分配一大段连续的内存空间将变得十分困难

解决办法:

——采用离散分配方式来解决难以找到一块连续的内存空间问题;

——只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

页表的地址变换机构:

——在两级页表中,外层页表即将程序的页表分页后的页号内层页号则是程序分页后的页号

两级页表的地址变换机构

分配与回收:

采用位示图的方法,用一位来表示一块内存块,用一位的两种状态来表示内存块是空闲还是已分配。某位为“1”状态表示相应块已被占用,为“0”状态的位所对应的块是空闲块。(个人理解:构成了一种类似于二维坐标系的特性。)

假定内存共有1600个物理块可用来存储信息。如果用字长为16位的字来构造位示图,共需100个字。位示图中第i个字的第j位对应的块号为——块号 = i × 16 + j 

分配:

计算作业所需块数,检查空闲块总数是否足够,不能满足则分配失败,能满足, 查位示图中为“0”的位,计算出块号,并填写相应页表。

  • 块号 = i × 位示图中的字长 + j

 

回收:

根据回收作业的页表,依次计算每个物理块在位示图中的位置第i字,第j位,并将该位置0,最后增加空闲块总数。

  • i=块号/位示图中的字长(整除)
  • j=块号%位示图中的字长

 

五、分段存储管理方式:

工作原理:

基本思想:

每个作业的地址空间按照自身的逻辑关系划分成若干段(比如主程序段、子程序段、数据段、堆栈段等)每个段都有自己的名字,通常可用一个段号来代替段名,每个段都从0开始独立编址,段内地址连续。段的长度由相应的逻辑信息组的长度决定,因而各段的长度不等。分配内存时,为每个段分配一连续的存储空间,段间地址空间可以不连续。

 

段表:

段表实现了从逻辑段到物理内存区的映射。系统为每个进程建立了一张段映射表,简称“段表”。进程的每个段在段表中占有一个表项,在其中记录了该段在内存中的起始地址(基址)和段的长度

段表示意图

动态地址变换:

地址结构:

逻辑地址分为段号段内地址两部分。

分段存储中的地址格式

上图所示的地址结构,允许一个程序最多可分为2^{16}(即64K)个段,每个段的最大长度为64KB。

 

地址变换:

系统设置了段表寄存器用来存储当前运行进程的段表的始址和段表长度,变换过程如下图所示:

具体过程类似于分页式!和分页式一样,这里取得一条指令或者数据需要两次访问内存,为了提高其速度,可以同样引入快表的机制。


存储保护:

在分段存储管理方式中,用户各分段是信息的逻辑单位,因此容易对各段实现保护。保护分为两种:

——越界保护:在地址变换过程中,段号和段表长度的比较,以及段内地址和段长的比较 。

——越权保护:在段表中设置存取控制字段来对各段进行保护。(相当于利用其控制字段来设置其权限操作!)


分页和分段的主要区别:

——页是信息的物理单位,分页是为了系统管理内存的方便而进行的,故对用户而言,分页是不可见的,是透明的;段是信息的逻辑单位,分段是作业逻辑上的要求对用户而言,分段是可见的

——页的大小是固定的,由系统决定;段的大小是不固定的,由用户作业本身决定。

——从用户角度看,分页的地址空间是一维的,而段的地址空间是二维的。

 

六、段页式存储管理方式:

基本原理:

——内存分成大小相同的块

——每个作业地址空间按照逻辑关系分成若干段,并为每个段赋予一个段名,每段可以独立从0编址。

——每段按内存块大小分成页,每段分配与其页数相同的内存块内存块可以连续也可以不连续。

——系统为每段建立页表记录每页对应的块,同时还为该程序建立段表记录每段对应的页表。

段页式存储管理

 

地址结构:

逻辑地址由三部分组成:段号S、段内页号P、页内地址d

地址变换:

为了实现地址变换,配置一段表寄存器,在该寄存器中存放段表的始址和段长。

——在段页式存储管理方式中,执行一条指令需要三次访问内存。第一次访问段表,从中得到页表的位置,第二次访问页表,得出该页所对应的物理块号,第三次按照得到的物理地址访问内存。

——为了提高地址变换速度,同样可以和分页存储管理方式和分段存储管理方式一样,设置一高速缓冲寄存器,利用段号和页号去检索该寄存器,得到相应的物理块号。

 

Ending... ...

http://www.lbrq.cn/news/1593109.html

相关文章:

  • 刚出来的前端工资多少/福州百度首页优化
  • 国内网站制作特点/推广方案范例
  • wordpress文章幻灯片代码/排名优化关键词
  • 网站建设属那种营业/安徽网站seo公司
  • 做钢材的网站/刚刚地震最新消息今天
  • 怎样建设b2c网站/百度竞价广告怎么投放
  • 手机怎么制作钓鱼网站/湛江百度网站快速排名
  • 网站后台登录地址修改/软文营销网站
  • 腾讯云服务器网站域名备案/做网络推广好吗
  • 网站换域名了怎么做301重定向/seo网站推广计划
  • 国务院关于政府网站建设/360优化大师旧版
  • 网站的后台怎么做/长春seo整站优化
  • 搜易网服务内容/seo引擎优化外包
  • 微信运营网站建设/搜索引擎营销的方法有哪些
  • 网站开发百灵鸟优化/简单的网站建设
  • 大型网站建设翻译英文/小说关键词生成器
  • 武汉外贸型网站建设/长沙新媒体营销
  • 成都php网站建设/镇江推广公司
  • 零基础网站建设视频教程/长沙专业seo优化公司
  • 如何给网站刷流量/软文范例大全200字
  • 网站维护是什么意思/奶茶网络营销策划方案
  • 学校网站模板 html/深圳seo公司
  • 个人网站建设的论文/开淘宝店铺怎么运营推广
  • 网站开发费用报价单/seo课程培训视频
  • 建网站需要什么技术/网上营销策略有哪些
  • 网站怎么做会员系统/社群营销成功案例
  • 山东建设管理局网站/网站统计工具有哪些
  • 长沙移动网站建设哪家好/网站推广排名优化
  • 用源码网站好优化吗/微信怎么推广找客源
  • 创建好网站如何把浏览器/建站推广
  • Linux发行版分类与Centos替代品
  • Spring之【详解FactoryBean】
  • Pandas query() 方法详解
  • 更换KR100门禁读头&主机
  • 【AI学习】RadioDiff:代码学习
  • OpenVLA复现