精华内容
下载资源
问答
  • 常用存储引擎

    2020-09-21 14:21:38
    一、mysql 有哪些常用存储引擎。 InnoDB MyISAM NDB Memory Merge 二、特点与适用场景 2.01 InnoDB特点 InnoDB是Mysql默认存储引擎(Mysql5.5.5之前是MyISAM),事务安全 三大特性(自适应hash,双写,...

    一、mysql 有哪些常用存储引擎。
        InnoDB
        MyISAM
        NDB
        Memory
        Merge

    二、特点与适用场景


     2.01  InnoDB特点
        InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM),事务安全
        三大特性(自适应hash,双写,插入缓冲)
     2.02  InnoDB适用场景
        适用 OLTP(联机事务处理过程)系统
        对事务的完整性有较高的要求,在并发条件下要求数据的一致性,数据操作中包含读、插入、删除、更新

     2.03  MyISAM特点
        MyISAM   这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁
    2.04  MyISAM适用场景
        日志类型,读压力较大的,更新少,写入多

    2.05  NDB特点
         mysql cluster 集群
         
    2.06  NDB适用场景
         mysql cluster 集群

    2.07  Memory特点
        内存数据库引擎 ,使用哈希(HASH)索引
        
    2.08  Memory适用场景
        临时表
        
     2.09  Merge特点
        分表存储引擎,实质为MyISAM引擎
        
    2.10  Merge适用场景
        大表分表

     三、InnoDB 引擎

     3.1 、INNODB 后台线程
      3.1.1 Master线程
        缓冲池中的数据异步刷新到磁盘(包括下图内容),还包括重做日志缓冲刷新到磁盘。
        包括 脏页刷新,undo页回收,合并插入缓冲,新版本则 脏页刷新,undo页回收被分离出来,一个page cleaner Thread,一个purge Thread。 其内部为多个循环,主循环,刷新循环,暂停循环,后台循环
        主循环2大操作
                  每1s 的操作:
                             1.日志缓冲插入磁盘,即使事务没有提交(总是)
                             2.合并插入缓冲(可能)
                             3.如果当前没有用户活动,则切换到background loop(可能)
                  每10s 的操作:
                             1.合并插入缓冲(总是)
                             2.日志缓冲刷新到磁盘(总是)
                             3.回收undo页(总是)

     3.1.2 Page Cleaner线程
        负责脏页刷新(数据落盘)

    3.1.3 Purge 线程
        负责undo页回收 (事务提交了undolog不需要了就需要被回收)

    3.1.4 异步io 线程
        负责数据库写io请求的回调

    3.2 、INNODB 内存结构

    3.3 、INNODB 三大特性
    3.3.1 自适应hash索引
        Innodb 会监控表上各索引页的查询,如果观察到简历hash 索引会到来性能上的提升,则建立hash索引。
        根据访问频率 ,热点数据 自动建立hash索引,hash索引只适合等值查询。

    3.3.2 插入缓冲(性能提升)
         对于非聚集索引的插入和更新,并不是每次都直接插入到索引页,而是先判断是否在缓冲池中,若在 则直接插入到索引页,若不在,则先放到Insert Buffer 中,好处是当有多个插入操作属于同一页操作时候, 可以合并起来,一起写入索引页。
         使用插入缓冲需要满足一下俩个条件:
         索引是二级索引(主键是唯一的不可用)
         非唯一(插入缓冲时候数据库不检查索引页来判断是否唯一, 如果去检查就得加在很多索引页,导致insert buffer失效,这样还不如直接写索引页呢?)

    3.3.3 双写(数据页可靠性)
        redolog 记录是对数据页的物理操作,如偏移量100,写‘aaaa’记录, 如果这一页损坏,则数据无法修复,重做日志失去意义,于是innodb将要更改的这一页备份在另外的一个单独的地方。


    3.4 、INNODB 索引

    3.4.1 主键索引(聚簇索引)
        索引与数据同在一起,在B+树的叶子节点。
        按主键值的大小进行记录和页的排序。
        B+树的叶子节点存储的是完整的用户记录,就是指这个记录中存储了所有列的值。
    3.4.2 二级索引(非聚簇索引)
        索引页与数据页分离。
        按主键值的大小进行记录和页的排序。
        按主键值的大小进行记录和页的排序。
        在对二级索引进行查找数据时,需要根据主键值去聚簇索引中再查找一遍完整的用户记录,这个过程叫回表。

    3.4.3 Innodb 索引结构图
     

     

    展开全文
  • 哪些函数是文档、视图相互处理用◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit录入值◆ 24 ◆如何启动...
  • 在linux系统中存在很多命令,这些命令可以帮助我们完成不同的工作,在这里面我们先介绍一些常用的基础命令,这些命令可以帮助我们完成对应的基本操作,随着以后的学习,我们还会接触到更多可以帮助我们完成不同工作...

    一、常用命令介绍
    在linux系统中存在很多命令,这些命令可以帮助我们完成不同的工作,在这里面我们先介绍一些常用的基础命令,这些命令可以帮助我们完成对应的基本操作,随着以后的学习,我们还会接触到更多可以帮助我们完成不同工作的linux命令,我们来一起看一下这些基础命令都有哪些

    1. 开关机命令
      sync: 将缓冲区的数据同步到磁盘中(关机,重启前都需要执行,避免数据丢失),在Linux系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘,如此可提高系统的执行效率

    shutdown 以一种安全的方式关闭系统。所有登陆用户都可以看到关机信息提示,并且禁止登陆

    -k 并非真正关机,只向所有人显示警告信息。
    如:shutdown -k +5
    -r 重启。默认延迟一分钟
    如:shutdown -r +3 “shutdown in 3 minutes”
    -h 关机。默认延迟一分钟
    如:shutdown -h 12:00/shutdown -h now
    -f 重启时跳过磁盘检测。
    -F 重启时强制磁盘检测。
    -c 取消shutdown

    2 .系统信息
    uname

    -s 输出内核名称
    -n 输出网络节点上的主机名
    -r 输出内核发行号
    -v 输出内核版本
    -m 输出主机的硬件架构名称
    -p 输出处理器类型或"unknown"
    -i 输出硬件平台或"unknown"
    -o 输出操作系统名称
    -a 以如下次序输出所有信息。其中若-p和-i的结果不可知则省略

    hostname 查看主机名

    hostnamectl set-hostname hello

    date 查看和设置时间

    时间方面:
    %n : 下一行
    %t : 跳格 tab
    %H : 小时(00…23)
    %I : 小时(01…12)
    %k : 小时(0…23)
    %l : 小时(1…12)
    %M : 分钟(00…59)
    %p : 显示本地 AM 或 PM
    %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
    %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
    %S : 秒(00…60)
    %T : 直接显示时间 (24 小时制)
    %X : 相当于 %H:%M:%S
    %Z : 显示时区

    日期方面:
    %a : 星期几 (Sun…Sat)
    %A : 星期几 (Sunday…Saturday)
    %b : 月份 (Jan…Dec)
    %B : 月份 (January…December)
    %c : 直接显示日期与时间
    %d : 日 (01…31)
    %D : 直接显示日期 (mm/dd/yy)
    %h : 同 %b
    %j : 一年中的第几天 (001…366)
    %m : 月份 (01…12)
    %U : 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)
    %w : 一周中的第几天 (0…6)
    %W : 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)
    %x : 直接显示日期 (yyyy-mm-dd)
    %y : 年份的最后两位数字 (00.99)
    %Y : 完整年份 (0000…9999)

    [root@manage01 ~]# date ‘+%I%M%S’
    025929
    [root@manage01 ~]# date ‘+%r’
    上午 02时59分49秒
    [root@manage01 ~]# date ‘+%s’
    1584428402
    [root@manage01 ~]# date ‘+%Z’
    EDT
    [root@manage01 ~]# date ‘+%a’

    [root@manage01 ~]# date ‘+%A’
    星期二
    [root@manage01 ~]# date ‘+%b’
    3月
    [root@manage01 ~]# date ‘+%B’
    三月
    [root@manage01 ~]# date ‘+%c’
    2020年03月17日 星期二 03时01分36秒
    [root@manage01 ~]# date ‘+%T%n%D’
    03:03:35
    03/17/20
    [root@manage01 ~]# date ‘+%T%t%D’
    03:03:58 03/17/20
    [root@manage01 ~]# date -s 2021-10-25
    2021年 10月 25日 星期一 00:00:00 EDT
    [root@manage01 ~]# date -s 18:00
    2021年 10月 25日 星期一 18:00:00 EDT
    [root@manage01 ~]# date -s 18:30:21
    2021年 10月 25日 星期一 18:30:21 EDT
    [root@manage01 ~]# date -s “2021-04-28 15:30:20”
    2021年 04月 28日 星期三 15:30:20 EDT

    3 .文件和目录
    cd /etc: 进入到/etc这个目录

    pwd: 查看当前的工作路径

    -P 显示实际位置
    -L 显示所在位置

    [root@manage01 ~]# cd /
    [root@manage01 /]# ls
    bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
    [root@manage01 /]# cd bin/
    [root@manage01 bin]# pwd
    /bin
    [root@manage01 bin]# pwd -P
    /usr/bin
    [root@manage01 bin]# pwd -L
    /bin

    ls: 查看当前目录下有哪些文件

    -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
    -A 显示除 “.”和“…”外的所有文件。
    -B 不输出以 “~”结尾的备份文件。
    -c 与lt一起使用,显示并按照修改时间(ctime)排序,与l一起使用,显示修改时间,按名称排序。
    -d 将目录象文件一样显示,而不是显示其下的文件。
    -f 对输出的文件不排序,使用此选项后aU选项生效,lst选项失效
    -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
    -g 类似l但是不显示所有者
    -h 与l一起,以易于阅读的格式输出文件大小(例如 1K 234M 2G)
    -i 输出文件的i节点的索引信息。
    -k 以k字节的形式表示文件的大小。–si类似k但是以1000为进制而非1024
    -l 列出文件的详细信息。
    -L 遇到链接文件是,显示原文件的信息,而非链接信息
    -m 横向输出文件名,并以“,”作分格符。
    -n 类似l,但是用数字的 UID,GID 代替名称。
    -o 显示文件的除组信息外的详细信息。
    -p 目录后面加上/标识
    -q 用?代替不可输出的字符。
    -r 对目录反向排序。
    -s 在每个文件名后输出该文件的大小。
    -t 以修改时间排序。
    -u 与lt一起使用,以访问时间(atime)排序;与l一起使用显示访问时间,按照名称排序
    -x 按列输出,横向排序。
    -Q 把输出的文件名用双引号括起来。
    -R 列出所有子目录下的文件。
    -S 以文件大小排序。
    -X 以文件的扩展名(最后一个 . 后的字符)排序。
    -1 一行只输出一个文件。
    –color=no 不显示彩色文件名
    –help 在标准输出上显示帮助信息。
    –version 在标准输出上输出版本信息并退出。

    mkdir 建立目录

    -m 设置权限模式(类似chmod)
    -p 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
    -v 每次创建新目录都显示信息
    -Z 将每个创建的目录的SELinux 安全环境设置为CTX

    touch 建立文件

    -a 只更改访问时间
    -c 不创建任何文件
    -m 只更改修改时间
    -r 使用指定文件的时间属性替代当前时间
    -t 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间替代当前时间

    [root@manage01 ~]# stat hello
    文件:hello
    大小:0 块:0 IO 块:4096 普通空文件
    设备:fd00h/64768d Inode:34502264 硬链接:1
    权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-03-17 16:51:35.502961371 -0400
    最近更改:2020-03-17 16:51:35.502961371 -0400
    最近改动:2020-03-17 16:51:35.502961371 -0400
    创建时间:-
    [root@manage01 ~]# touch -a -t 202002010101.30 hello
    [root@manage01 ~]# stat hello
    文件:hello
    大小:0 块:0 IO 块:4096 普通空文件
    设备:fd00h/64768d Inode:34502264 硬链接:1
    权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-02-01 01:01:30.000000000 -0500
    最近更改:2020-03-17 16:51:35.502961371 -0400
    最近改动:2020-03-17 16:51:53.143475189 -0400
    创建时间:-
    [root@manage01 ~]# touch -m -t 202002050101.30 hello
    [root@manage01 ~]# stat hello
    文件:hello
    大小:0 块:0 IO 块:4096 普通空文件
    设备:fd00h/64768d Inode:34502264 硬链接:1
    权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-02-01 01:01:30.000000000 -0500
    最近更改:2020-02-05 01:01:30.000000000 -0500
    最近改动:2020-03-17 16:52:07.837453512 -0400
    创建时间:-

    #将hello-linux.txt的属性改成与anaconda-ks.cfg一样
    [root@manage01 ~]# stat hello-linux.txt
    文件:hello-linux.txt
    大小:12 块:8 IO 块:4096 普通文件
    设备:fd00h/64768d Inode:34513350 硬链接:1
    权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-03-17 22:50:51.319377144 -0400
    最近更改:2020-03-17 22:50:45.909483733 -0400
    最近改动:2020-03-17 22:50:45.912483674 -0400
    创建时间:-
    [root@manage01 ~]# stat anaconda-ks.cfg
    文件:anaconda-ks.cfg
    大小:1378 块:8 IO 块:4096 普通文件
    设备:fd00h/64768d Inode:34973658 硬链接:1
    权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-03-16 23:08:34.121427663 -0400
    最近更改:2020-02-04 15:01:33.273959663 -0500
    最近改动:2020-03-18 16:33:48.873881970 -0400
    创建时间:-
    [root@manage01 ~]# touch -r anaconda-ks.cfg hello-linux.txt
    [root@manage01 ~]# stat hello-linux.txt
    文件:hello-linux.txt
    大小:12 块:8 IO 块:4096 普通文件
    设备:fd00h/64768d Inode:34513350 硬链接:1
    权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-03-16 23:08:34.121427663 -0400
    最近更改:2020-02-04 15:01:33.273959663 -0500
    最近改动:2020-03-18 18:22:48.694597233 -0400
    创建时间:-

    rm 删除文件或目录

    -f 强制删除。忽略不存在的文件,不提示确认
    -i 在删除前需要确认
    -I 超过三个文件或者递归删除前要求确认。比-i提示内容更少
    -d 删除空目录
    -r 递归删除目录及其内容

    这些命令都是初学者可能会经常用到的,大家可以在自己的虚拟机上练习一下

    cp 拷贝

    -i 覆盖前询问(使前面的 -n 选项失效)
    -n 不要覆盖已存在的文件(使前面的 -i 选项失效)
    -R, -r, --recursive 递归复制目录及其子目录内的所有内容
    -s 只创建符号链接而不复制文件
    -f 强制,将目标文件无法打开则将其移除并重试

    mv 移动/改名

    -f 覆盖前不询问
    -i 覆盖前询问
    -n 不覆盖已存在文件
    #如果您指定了-i、-f、-n 中的多个,仅最后一个生效。

    cat 查看文件内容

    -A 等价于-vET
    -b 对非空输出行编号
    -e 等价于-vE
    -E 在每行结束处显示$
    -n 对输出的所有行编号
    -s 不输出多行空行
    -t 与-vT等价
    -T 将跳格字符(tab)显示为 ^I
    -v 使用^和M

    二、常用符号

    • 任意字符串

    ? 任意字符

    / 路径间隔符
    当前用户的家目录 管理员家目录为/root,其它用户的家目录在/home/用户名
    展开全文
  • 操作系统复习4

    2016-12-11 21:30:48
    1、存储管理的主要任务; 内存分配和回收、内存保护、地址映射、内存共享、内存扩充 2、为什么要用缓冲区技术...常用的缓冲技术:单缓冲、双缓冲、多缓冲以及在多缓冲基础上组织的成的缓冲池。 3、为什么要做记录的

    1、存储管理的主要任务;

    内存分配和回收、内存保护、地址映射、内存共享、内存扩充

    2、为什么要用缓冲区技术?常用的软件缓冲技术有哪些?

    1、协调CPU与I/O设备之间速率不匹配

    2、协调逻辑记录与物理记录(物理块)大小不一致

    3、解决DMA控制方式或通道方式下可能出现的进程长时间等待问题

    常用的缓冲技术:单缓冲、双缓冲、多缓冲以及在多缓冲基础上组织的成的缓冲池。

    3、为什么要做记录的成组和分解?有什么优点和缺点?

    原因:磁盘块的大小是预先划分好的,大小固定,而逻辑记录的大小是用户文件性质决定的,不一定和块的大小一致。

    4、使用快表与否对存取时间的影响,会计算; P96、97相关内容及例题

    5、磁盘物理块与逻辑块之间的换算,会计算;

    6、FIFO和LRU算法;

    7、作业调度中,先来先服务、短作业优先策略和最高响应比调度策略,会列表计算;但注意题目,以往我们都说是多道系统下,因为采用的不可抢占方式,一道作业被调度就必须运行结束下一个作业才能调度,所以也可以说成是在单道串行方式下采用这些调度策略,具体做题方法和步骤与作业一样;

    8、移动臂调度算法,先来先服务、最短寻道时间优先和电梯调度算法;

    9、P、v操作解决同步与互斥问题,看例题和作业题。

    10、进程与线程的比较;P34

    线程是从传统进程发展起来的,是对传统进程的调度和分派执行功能的独立和发展。线程具有传统进程的很多特征,因此线程也称为轻量级进程,而传统的进程也称为重量级进程。在多线程环境下,线程离不开进程,一个进程可以有多个线程,并且至少有一个线程(主线程)。

    从4个方面进行比较:

    1、并发性:系统中进程可以并发运行,线程也可以;

    2、资源分配与占有:在系统中,进程是资源分配和保护的基本单位,线程几乎不拥有资源,但线程可以访问本进程的资源;

    3、系统开销与效率:进程在创建或撤销时,系统需要对进程进行资源分配和回收,而线程的创建和回收的开销要小得多。

    4、调度效率与灵活性:操作系统中,进程主要是资源分配和保护的基本单位,进程拥有资源;而线程是系统调度和分派的基本单位,线程不拥有资源,但可以访问该进程的资源。这样,线程的调度和切换简单易行,并且在同一进程中的线程的切换不会导致进程切换,因此,系统效率很高,并且并发程度也大大提高。

    11、文件的逻辑结构有哪些?

    无结构的字符流式文件和有结构的记录式文件

    12、I/O控制方式

    程序查询方式、中断方式、DMA(直接内存存取)方式、I/O通道控制方式

    展开全文
  • 3、进程通信方式有哪些? 4、线程同步方式有哪些? 5、操作系统中进程调度策略有哪几种? 6、说一说死锁处理基本策略和常用方法。? 7、什么是死锁?死锁产生条件? 8、分页和分段有什么区别? 9、什么是缓冲...
  • 操作系统常见面试题整理1、说一说进程和线程定义以及他们区别2、线程同步方式有哪些?3、进程通信方式有哪些?4、什么是缓冲区溢出?有什么危害?原因是什么?5、什么是死锁?产生条件?6、进程有哪些状态...

    1、说一说进程和线程的定义以及他们的区别

    进程是一个程序的实例,它是系统资源分配与管理的基本单位,而线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。一个进程可以有多个线程,多个线程可以并行执行,他们有自己的一组CPU寄存器和栈,共享堆、全局变量、静态变量、文件等公用资源

    2、线程同步的方式有哪些?

    互斥锁: 给临界区加锁,防止多个线程同时读写某一块内存区域。
    信号量: 一次可以允许n个线程访问,用来保证多个线程不会互相冲突。
    事件(信号): 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

    3、进程的通信方式有哪些?

    管道、系统IPC(进程间通信)(包括消息队列、信号量、共享内存)、SOCKET,其中管道又分为:匿名管道(pipe)、命名管道(fifo)

    • 匿名管道是半双工的,数据只能单向通信;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。
    • 命名管道也是半双工的,但是允许无亲缘关系的进程间进行通信,以FIFO的文件形式存在于文件系统中。
    • 消息队列消息的链表,存放在内核中并由消息队列标识符标识。
    • 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
    • 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

    4、什么是缓冲区溢出?有什么危害?原因是什么?

    含义: 是为缓冲区提供了多于其存储容量的数据,就像往杯子里倒入了过量的水一样。
    危害: 破坏程序数据,造成意外终止;甚至可能被黑客利用该漏洞获得系统的控制权
    原因: 程序中没有仔细检查用户输入

    5、什么是死锁?产生的条件?

    含义: 在两个或者多个并发的进程中,如果每个进程都占有一部分资源而又请求其他进程占用的资源,造成程序无法向前推进,就成这一组进程产生了死锁。通俗地讲就是多个进程无限期地阻塞、相互等待的状态。
    产生的条件: 四个必要条件

    • 互斥: 一个资源只能由一个进程使用
    • 占用并等待: 一个进程必须占用一个资源并请求另一个资源
    • 非抢占: 资源不能被抢占
    • 循环等待: 若干的进程之间形成一种环形的等待资源关系

    6、进程有哪些状态?

    一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。五态模型如下:

    • 创建态(new):进程正在被创建。
    • 运行态(running):进程占有CPU正在运行。
    • 就绪态(ready):进程具备运行条件,等待系统分配处理器以便运行。
    • 等待态(waiting):又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。
    • 终止态(terminated):进程完成执行。

    通常,一个进程在创建后将处于就绪状态。几种常见的状态转换:

    • 新建态->就绪态:进程创建完成,而且满足执行的条件(系统内存、性能允许)。
    • 就绪态->运行态:分配了CPU。
    • 运行态->等待态:因等待某种事件(如IO)发生而无法继续执行。
    • 运行态->就绪态:时间片用完,或者是中断,或者是创建并等待子进程完成等,不得不让出处理器。
    • 运行态->终止态:程序运行完毕或者出现错误被强制终结。

    7、分页和分段的区别?

    分页: 用户程序的逻辑内存被划分成若干固定大小的区域,称为“”;对应的物理内存也划分为多个固定大小的区域,称为“”。每一个页对应一个帧。当需要分配内存时,以页为分配单位,同时需要相应大小的帧来存放,但是这些帧是不必连续的内存空间。为了掌握空闲帧的信息,将逻辑内存的地址映射到物理内存的地址,设置了页表。其中逻辑地址包括两个部分:页号和页偏移。为提高性能,页表常被放在一个高速缓冲区中。分页的优点是方便通过共享页来实现代码的共享,但是受限。
    分段: 将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息(主程序、函数、方法、对象、堆、栈、局部/全局变量等)。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。它的逻辑地址包括两部分:分段号和段偏移。同样需要段表来维护。同样方便共享代码,限制更加宽松。
    得出----
    相似点: 都允许用户程序在内存空间中不连续存放。
    不同点:

    • 页是信息的物理单位,主要是为了防止内存空间产生碎片,对用户不可见;段是信息的逻辑单位,分段的目的是更好地理解程序实现代码共享,对用户可见。
    • 页是固定大小的内存空间,取决于硬件;而段是长度不等的内存空间,取决于程序。
    • 分页地址空间是一维的,分段的地址空间是二维的。

    8、进程(CPU)调度策略有哪些?

    (1) 先来先服务调度:先请求CPU的进程先分配CPU,非抢占。缺点:由于护航效果,存在CPU或者IO设备资源的浪费。
    (2)最短作业优先调度:选择剩余CPU区间长度最短的进程,可分为非抢占和抢占调度。优点:对于给定的一组进程,在平均等待时间上,最短作业优先调度算法是最优的算法。缺点:预先获得CPU的剩余长度是有难度的。
    (3)优先级调度:每个进程都有优先级,用数字表示,分为非抢占和抢占调度。优点:效率较高,最短作业优先调度也是优先级调度的一种。缺点:饥饿/无限阻塞,即低优先级的进程可能无法运行。解决方法:老化,随时间增大优先级。
    (4)轮转法调度:是先到先服务的变种,为每个进程分配一个时间片,每隔一个时间片发出一个时钟中断,并调度另一个进程。优点:响应时间短。缺点:时间片的长度选择需慎重,要大于80%的CPU时间。
    (5)多级队列调度:将就绪队列分成多个独立的队列,每个队列有自己的调度算法,并提供队列间的调度机制(如固定优先级抢占调度、队列划分时间片调度)。优点:调度的开销低。缺点:可能造成饥饿问题,灵活性稍差。
    (6)多级反馈队列调度:同样分为多个队列,队列都有自己的调度算法,但是进程在各个队列间有移动。优点:可以实现老化。缺点:需要确定的参数较多

    9、进程同步有哪些机制?

    进程同步主要是解决临界区问题,解决临界区问题需要满足三个条件:

    • 互斥: 某一个进程进入了临界区,其他进程就无法进入。
    • 前进: 如果没有进程在临界区执行,则必须确保一个进程可以进入临界区。
    • 有限等待: 一个进程请求进入临界区到允许,必须是有限的时间。

    主要的算法有:Peterson算法(仅限于两个进程)、原子指令(TestAndSet()/swap(),适用于多个进程),但是这两种方法都会产生忙等待的问题,所以又出现了有限等待的原子指令
    还有一种进程同步的机制为信号量,适用于单个资源/多个资源的同步操作。自旋锁(循环等待)、挂起-唤醒(运行态->等待态->就绪态),选择哪一种取决于上下文切换的开销以及成功获取锁之前需要等待的时间

    10、死锁的处理基本策略和常用方法

    预防死锁(确保至少一个必要条件不成立)、避免死锁(依据预先得到的资源信息,判断当前请求是否会导致死锁,包括资源分配图算法和银行家算法)、检测死锁(等待图、死锁检测算法)、解除死锁(进程终止/资源抢占/回滚)。

    参考:常见面试题整理(操作系统)

    展开全文
  • 操作系统

    2018-09-29 15:33:05
    文章目录四个特征进程线程进程状态引起进程挂起状态原因资源竞争会引发两个控制问题进程同步机制死锁死锁产生原因死锁产生四个条件处理基本策略和常用方法预防死锁策略解除死锁策略银行家算法分页分段进程...
  • VC++常用功能实例

    2010-01-25 23:28:46
    哪些函数是文档、视图相互处理用◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit录入值◆ 24 ◆如何启动...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    ◆ Windows 95/98常用的FAT 32文件系统:vfat ; ◆ Win NT/2000 的文件系统:ntfs ; ◆ OS/2用的文件系统:hpfs; ◆ Linux用的文件系统:ext2、ext3; ◆ CD-ROM光盘用的文件系统:iso9660。 虽然vfat是指...
  • [Q]Oracle有哪些常见关键字,不能被用于对象名 17 [Q]怎么查看数据库版本 18 [Q]怎么查看数据库参数 18 [Q]怎么样查看数据库字符集 19 [Q]怎么样修改字符集 19 [Q]怎样建立基于函数索引 19 [Q]怎么样移动表或表分区 ...
  • assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...
  • 而作业调度属于高级处理机管理,即确定系统哪些作业将获得CPU。 (2)进程是一个具有一定独立功能程序关于某个数据集合一次运行活动。 (3)引入进程意义是描述多道程序设计系统中程序动态执行...
  • 操作系统期末试卷与答案

    热门讨论 2009-12-30 11:02:22
    2、CPU调度可能发生时机有哪些? 答: CPU调度可能发生在当一个进程: l 从运行转到等待 l 运行转到就绪 l 从等待转到就绪 l 终止运行 3、同步机构应遵循哪些原则? 答: 使用互斥区原则: 有空让进:当无...
  • 3.7 减少分支延迟静态方法有哪些? 答:(1) 预测分支失败方法。 (2) 预测分支成功方法。 (3) 延迟分支方法。 3.8 简述延迟分支方法中3种调度策略优缺点。 答: 调度策略 优点 缺点 从前调度 总是...
  • Exceptionless是一款日志记录框架,它开源、免费、提供管理界面、易于安装和使用,底层采用ElasticSearch作为日志存储,提供了快速、丰富查询API,方便我们进行系统集成。 包括主要功能(引用自) 日志选择:...
  • 测试开发常见面试题

    2020-11-24 22:28:53
    测试开发面经 计算机网络面试题 简述TCP/UDP的区别 简述常用的端口及对应的服务 TCP三次握手和四次挥手的过程 私有(保留)地址 IP常用分类,简述 ...线程,进程同步的方式有哪些 什么是缓冲区溢出,有什么
  • 最新SysinternalsSuite

    2008-11-26 18:26:59
     检视远端开启档案有哪些。  PsGetSid  显示电脑或使用者 SID。  PsInfo  取得有关系统的资讯。  PsKill  终止本机或远端处理程序。  PsList  显示处理程序和执行绪相关资讯。  PsLoggedOn  显示使用...
  • JDK相关基础面试题

    2020-05-13 12:21:35
    1. JDK基础知识结构 JDK1.8中一级java包有14个,我们需要掌握的有 java.util 包含集合框架、集合类、日期和时间...2.1. 你常用的JDK类有哪些?请说出5个。 String、StringBuffer、Integer、ArrayList、HashMap、Date
  • 2021/3/28 首次更新,代码评审讨论到索引失效场景,主要是为了记录索引失效场景有哪些,文中对索引类型等内容存在待补充 1、MySQL常用数据引擎 MySQL常见数据库引擎主要有Innodb和Myisam,本文主要关注两种引擎下...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    不同编译器给出不同i值,有的为3,有的为4,哪个是正确? *3.4 这样一个巧妙表达式:a^=b^=a^=b;它不需要临时变量就可以交换a和b值。 3.5 可否用显式括号来强制执行我所需要计算顺序并控制相关副...
  • ABAP面试大全

    2013-12-30 15:44:36
    2.3.5财务模块:财务模块开发中常用的有哪些,简单举例说明: 12 2.3.6 PM 常用的TABLE 12 2.3.6 inner join 与 left-outer join的区别? 13 3. 权限相关 14 3.1 什么是权限对象(Authorization Objects)?在 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 101
精华内容 40
关键字:

常用的缓冲系统有哪些