操作系统

操作系统的主要目的:

管理系统资源,提高资源利用率,方便用户使用

进程的三种基本状态:

  • 就绪状态:进程已获得除CPU外的所有必要资源,只等待CPU时的状态。
  • 执行状态:进程已获CPU,正在执行。单处理机系统中,处于执行状态的进程只一个;多处理机系统中,有多个处于执行状态的进程。
  • 阻塞状态:正在执行的进程由于某种原因而暂时无法继续执行,即进程执行受阻。

状态转换:

  • 就绪->运行:经过处理机调度,就绪进程得到处理机资源
  • 运行->就绪:时间片用完或在可剥夺系统中有更高优先级进程进入
  • 运行->阻塞:进行需要的某一资源还没准备好
  • 阻塞->就绪:进程需要的资源已准备好

挂起

挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程。机器的资源是有限的,在资源不足的情况下,有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,解除挂起为就绪态

同步机制的原则:

  • 空闲让进;
  • 忙则等待(保证对临界区的互斥访问);
  • 有限等待(有限代表有限的时间,避免死等);
  • 让权等待,(当进程不能进入自己的临界区时,应该释放处理机,以免陷入忙等状态)。

进程间通信(IPC,InterProcess Communication)方式

管道      又称无名管道

  • 半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
  • 只能用于父子进程之间的通信。
  • 可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

FIFO      又称命名管道,一种文件类型

  • 也是半双工通信。
  • FIFO可以在无关的进程之间交换数据,与无名管道不同。
  • FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

消息队列      链接表,存放在内核中,由一个标识符来标识

  • 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
  • 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
  • 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

信号量      计数器

  • 信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
  • 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。

共享内存

  • 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
  • 因为多个进程可以同时操作,所以需要进行同步。
  • 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。

上下文切换

内核在 CPU 上对于进程(包括线程)进行以下的活动:

  1. 挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处
  2. 在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复
  3. 跳转到进程被中断时的代码行以恢复该进程。

进程与线程

进程(Process) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。

  • 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  • 同一进程中的多个线程共享常量池,堆,方法区。

组成:

  • PCB进程控制块:保存进程运行期间相关的数据,是进程存在的唯一标志
  • 程序段:能被进程调度程序调度到CPU运行的程序代码段
  • 数据段:存储程序运行期间的相关数据,可以是原始数据也可以是相关结果

线程(thread) 操作系统能够进行运算调度的最小单位,一个进程中可以并发多个线程。

  • 每个线程拥有自己的栈。

区别:

  • 进程有自己的独立地址空间
  • 进程是资源分配的最小单位,线程是CPU调度的最小单位
  • 一个进程挂掉不会影响其他进程,而线程挂掉会影响其他线程

调度算法:

先来先服务算法FCFS

短作业优先算法SJF

优先级调度算法

  • 非抢占式    分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成
  • 抢占式        在其执行期间,一出现优先权更高的进程就会停止当前进程的执行,将处理机分配给新到的优先权最高的进程

高响应比优先算法

  • 响应比=(等待时间+需要执行的时间)/需要执行的时间

时间片轮转调度算法

  • 遵循了先来先服务的原则,就绪的进程队列中每个进程轮流运行一次规定的时间片(比如100ms),没有执行完毕,进程丢到队列的末尾,继续就绪等待。

多级反馈队列算法

  • 多个反馈队列,队列有优先级排序,优先级越高的队列时间片越少。
  • 进程调用,先进入头队列,多个进程则按FCFS,经过时间片后没有完成则进入下一个队列,以此类推。

死锁

在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。

产生死锁的必要条件:

  • 互斥条件:资源不能被共享,只能由一个进程使用。
  • 请求与保持条件:已经得到资源的进程可以再次申请新的资源。
  • 非抢占条件:已经分配的资源不能从相应的进程中被强制地剥夺。
  • 循环等待条件:系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

处理死锁问题:

  • 忽略该问题,鸵鸟算法。
  • 仔细地对资源进行动态分配,使系统始终处于安全状态以避免死锁。
  • 通过破除死锁四个必要条件之一,来防止死锁产生。

虚拟内存

一种内存管理技术,将应用程序所占的部分内存暂时转为外存,在需要时进行数据交换。

  • 优点:可以弥补内存大小的不足;一定程度的提高反映速度;延长内存使用寿命。
  • 缺点:占用一定的物理硬盘空间;加大了对硬盘的读写;设置不得当会影响整机稳定性与速度。

调度方式:

  • 分页式:将逻辑和物理地址空间都分成固定大小的页。没有外碎片。

每页大小为4KB,主存大小为4GB。则地址长度为32 位,其中0~11位为页内地址,即:12~31位为页号,地址空间最多允许有2^20页。

  • 段式:按程序的逻辑结构划分地址空间,段长度可以动态改变。没有内碎片。

段号为16位,段内偏移量为16位,则一个作业最多可有2^16=65536个段,最大段长为64KB。

  • 段页式:每个分段又被分成若干个固定大小的页。

页面置换算法

  • OPT最优算法:需要知道以后要被用到的页,然后将不会被用到的页换出内存;如果所有页都会被用到,就把需要使用时间离现在最长的页换出。不可能实现的,因为当前无法获知以后哪些页要被用到。不过最优算法还是能够作为其他算法优秀程度的衡量。
  • FIFO算法:置换出当前已经待在内存里时间最长的那个页。没有考虑页面的重要性的问题。
  • LRU最近最少使用算法:将最近使用最少的页面换出内存。

中断

计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。

每个中断都有一个对应的优先级,当处理器在处理某一中断的时候,只有比这个中断优先级高的中断可以被处理器接受并且被处理。

中断一般分为三类:

  • 内部异常中断:由计算机硬件异常或故障引起的中断。
  • 软中断:由程序中执行了引起中断的指令而造成的中断。
  • 外部中断:由外部设备请求引起的中断。

系统调用

操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作系统一般都强制用户进程不能直接操作内核。具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。

  • 内核态:cpu可以访问内存的所有数据,包括外围设备。
  • 用户态:只能受限的访问内存,且不允许访问外围设备。

用户态切换到内核态的方式:

  • 系统调用:程序需要使用操作系统提供的服务时,比如说打开某一设备、创建文件、读写文件(这些均属于系统调用)等,就需要向操作系统发出调用服务的请求,这就是系统调用。
  • 异常:发生异常,由当前进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
  • 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序。

信号量(Semaphore)和互斥锁(Mutex)

  • 互斥锁:只允许一个线程/进程访问资源,保证了使用资源线程的唯一性和排他性,但是无法限制资源释放后其他线程申请的顺序问题,所以是无序的。
  • 信号量:在初始化变量的时候可以控制允许多少个线程/进程同时访问一个临界区,其他的线程/进程会被堵塞,直到有人解锁。

信号量:利用PV操作实现互斥

  • P操作即wait(S) 申请资源
  • V操作即signal(S) 释放资源
  • S 表示可用资源的数量

数据库

事务:事务是并发控制的基本单元,事务是一个操作序列,要么都执行,要么都不执行,他是一个不可分割的工作单位,事务是维护数据库一致性的单位。

事务特性ACID

  • A, atomacity原子性:     要么都执行,要么都不执行。
  • C, consistency一致性: 数据改变前后状态一致,如买家花100,卖家赚100。
  • I, isolation隔离性:         允许多个用户并发访问。
  • D, durability 持久性:     事务结束后,事务处理的结果必须得到固化。即一旦提交,对数据库改变是永久的。

隔离级别:一个事务必须与由其他事务进行的资源或数据更改相隔离的程度。隔离级别从允许的并发副作用(例如,脏读或虚拟读取)的角度进行描述。

四种隔离级别:

  • 未提交读:所有事务都可以“看到”未提交事务的执行结果,读取未提交数据,也被称为“脏读”。
  • 已提交读:只读取提交的数据并等待其他事务释放锁。
  • 可重复读:保证同一事务的多个实例在并发读取事务时,会“看到同样的”数据行。
  • 可序列化:制事务排序,使之不可能相互冲突,从而解决幻读问题。简而言之,在每个读的数据行上加锁。

脏读  不可重复读 幻读
Read uncommitted     √            √             √
Read committed         ×            √             √
Repeatable read         ×            ×             √
Serializable                 ×            ×             ×

MYSQL的两种存储引擎

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

索引

拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。用于提高数据库表数据访问速度

常见索引类

  • 普通索引:最基本的索引,没有任何限制
  • 唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
  • 主键索引:它 是一种特殊的唯一索引,不允许有空值。
  • 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时耗空间。
  • 组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

最左前缀原则:顾名思义,最左优先,比如,我们建立了一个以(a,b,c)为组合的索引,那么将会得到:a, ab,abc三种索引。若我们按列“b”进行查找,都不会使用到a, ab,abc三种索引。

Join

  • INNER JOIN(内连接,或等值连接):两个表属性的交集
  • LEFT JOIN(左连接):取得左表完全记录,即是右表并无对应匹配记录。
  • RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表完全记录,即是左表并无匹配对应记录。

聚集索引、哈希索引、b+树索引

  • B+树的简单定义:B+树是为磁盘或其他存储设备设计的一种平衡查找树。B+树中所有记录都是按键值大小顺序存放在叶子节点上,各叶子节点通过指针进行连接。
  • 哈希索引(Hash indexes)采用哈希表来对键值进行查找,时间复杂度为O(1)。使用哈希索引时对于键值的等值查询是非常快的,但是其他类型的查询如范围查询、模糊查询、排序等是不能使用哈希索引的。这是哈希索引使用比较少的主要原因。
  • 聚集索引(Clustered Index)又称聚簇索引,其叶子节点存放记录。每个InnoDB 表有一个特定的索引叫做聚集索引,存储行的数据。如果你的表定义了主键那么主键就是聚集索引,如果没有定义主键,MySQL 会选择第一个非空唯一索引列作为聚集索引,如果表中也没有唯一索引,InnoDB会生成一个类似RowId的隐藏的聚集索引。

语法

SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

Distinct
用途:被用作返回唯一的值。SELECT DISTINCT column-name(s) FROM table-name
Alias
用途:
可用在表、结果集或者列上,为它们取一个逻辑名称。 SELECT column AS column_alias FROM table

聚集函数:

count
用途:传回选取的结果集中行的数目。
sum
用途:以表达式传回所有值的总和,或仅 DISTINCT 值。SUM 仅可用于数值行。已忽略 Null 值。
avg
用途:传回选取的结果集中值的平均值。已忽略 Null 值。
max
用途:传回选取的结果集中值的最大值。已忽略 Null 值。
min
用途:传回选取的结果集中值的最小值。已忽略 Null 值。

操作系统与数据库知识点相关推荐

  1. 管理mysql表知识点,数据库知识点整理(全)

    <数据库知识点整理(全)>由会员分享,可在线阅读,更多相关<数据库知识点整理(全)(12页珍藏版)>请在人人文库网上搜索. 1.UNIT 1四个基本概念1.数据(Data):数 ...

  2. 北京理工大学操作系统复习——习题+知识点

    文章目录 传送门 前言 ppt习题+课后习题汇总 第1章 操作系统概论 操作系统性能指标计算 第2章 进程管理 进程调度算法 课后2-9:最短作业优先 课后2-12:四种算法比较 课后2-13:轮转与 ...

  3. 网络、操作系统、数据库

    IP地址,标识你电脑的身份! 子网掩码,可以标识子网划分的情况,所属子网 默认网关,数据包默认选择的出口!一般是你的路由器地址! DNS服务器,把网站的域名转换成计算机能看懂的IP地址! 1.关系 I ...

  4. 找工作笔试面试那些事儿(13)---操作系统常考知识点总结

    上一节对数据库的知识做了一个小总结,实际找工作过程中,因为公司或单位侧重点不一样,考察的知识也是不尽相同的,但是作为计算机类的学生,操作系统的知识也是必不可少的,去年参加笔试面试的时候,腾讯微软阿里等 ...

  5. Oracle Goldengate OGG 11g与各操作系统及数据库版本的兼容列表

    Oracle Goldengate OGG 11g (11.1.1.0.0)与各操作系统及数据库版本的兼容列表如下,仅供参考: Oracle GoldenGate Certification Matr ...

  6. oracle服务器的操作系统,Oracle Linux 操作系统及数据库的时区机制分析

    Oracle Linux 操作系统及数据库的时区机制分析 1. /etc/localtime 这个文件记录的是系统的时区,缺省的数据库由此获得时区信息 这个文件是二进制文件,修改该文件的方法是拷贝/u ...

  7. 【转载】15分钟搭建Linux操作系统+Oracle数据库的环境

    2019独角兽企业重金招聘Python工程师标准>>> 一直想学习下Linux下Oracle数据库方面的运维,但从头安装Linux操作系统,再装Oracle数据库的过程确实非常繁琐, ...

  8. MySQL8数据库知识点概述

    MySQL8数据库知识点概述 MySQL数据库简介 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 表设计三大范式 MySQL数据库简介 MySQL数据库是由瑞典的MySQL ...

  9. 河海大学数据库知识点归纳整理

    河海大学数据库知识点归纳整理 前言 该文档主要包含了对河海大学数据库这一门课程进行的知识点归纳,并且提供了ppt等其他复习资料. 河海大学许卓明老师数据库期末考点! 1 CH01 CH02 数据模型与 ...

最新文章

  1. /etc/profile ,/etc/bashrc ,~/.bash_profile,~/ .bashrc 区别与联系
  2. python整理数据_Python常见数据结构整理
  3. Kudu Tablet design
  4. 怎么修改linux用户名密码忘记,linux passwd命令设置或修改用户忘记密码
  5. 父盒子高度为子盒子总高度自动撑满 height: fit-content; //设置内容高度
  6. Android主板串口线接法,9针rs232串口接线图以及接线方法
  7. 阿里巴巴推进中国中产阶级奢侈消费
  8. 天天打排位,你知道王者荣耀的皮肤怎么测试吗?
  9. LoRa节点ABP入网方式怎么样
  10. ieee754最小规格化正数C语言,IEEE754标准浮点格式
  11. 什么是前向纠错(FEC)?FEC最全解析
  12. 知网复制太麻烦了?试试这个方法
  13. 多思计组实验3---总线实验(含文件~)
  14. android开发 之 Paint
  15. 苹果cms采集明星资源无分类绑定的解决方法
  16. window.open返回值实例详解(子窗口向父窗口回显)
  17. 2020年8月8日英语总结
  18. 为什么要有前端架构师
  19. 干货分享,4款安卓小众软件,每一个都值得保留
  20. ArcGIS API For JavaScript Font字体简介,下载及本地部署

热门文章

  1. linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
  2. 《计算机网络》第10章在线测试,《计算机网络》第07章在线测试
  3. c高级语言程序设计B试题,2019-2010-2-《高级语言程序设计(C)》期末考试-题
  4. 定时器和promise_分析 Promise 内部实现
  5. 搭建linux软件仓库,创建自己的YUM仓库
  6. C语言高效编程与代码优化
  7. 基于PYNQ-Z2开发板实现矩阵乘法加速详细流程
  8. java emoji问号,emoji-java 用来表情转换,你会用了吗?
  9. pythonrequest得替代_Python爬虫通过替换http request header来欺骗浏览器实现登录功能...
  10. mysqld install mysql default_MySQL安装默认配置