【操作系统】第八章:CPU调度
背景
在进程/线程的生命周期中什么时候进行调度?
在一个状态向另一个状态转换的时候会触发一次调度。
内核运行调度程序的条件
一个进程从运行状态切换到等待状态
一个进程被终结了
不可抢占
调度程序必须等待事件结束
(效率并不是很高)
可以抢占
调度程序在中断被响应后执行
当前程序从运行切换到就绪,或者一个进程从等待切换到就绪
当前运行的进程可以被换出
(现代操作系统常用的策略,效率较高)
调度原则调度策略
程序执行模型
CPU利用率:CPU处于忙状态所占时间的百分比
吞吐量:在单位时间内完成的进程数量
周转时间:一个进程从初始化到结束,包括所有等待时间所花的时间
等待时间:进程在就绪队列中的总时间
响应时间:从一个请求被提交到产生第一次响应所花费的时间
比较调度算法的准则
更快的服务
低延迟:喝水的时候想要打开水龙头就有水
高带宽:给游泳池冲水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟
减少响应时间
减少平均响应时间的波动
增加吞吐量
减少开销(操作系统开销,上下文切换)
系统资源高效利用(CPU、I/O设 ...
【操作系统】第五章:虚拟内存
虚拟内存的起因随着技术发展,程序对内存的需求越来越大
我们需要更大的内存更强的机器才能让软件跑起来
程序规模的增长远大于存储器容量的增长速度
需要让更多的程序跑在有限的内存里
理想中的存储器:
更大
更快
更便宜
非易失性存储器
覆盖技术目标
在较小可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。
原理
把程序按照其自身逻辑结构,划分为若干功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行
必要部分的代码和数据常驻内存
可选部分在其他程序模块中实现,平时放在外存,需要时装入内存
不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,即他们可以公用一个分区
例子:
缺点:
coder 把一个大程序分为若干小功能模块并确定覆盖关系,费时费力,增加编程复杂度
覆盖模块实际上是时间换空间
交换技术目标多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源
原理
将暂时不能运行的程序送到外存
OS 将一个进程的地址空间保存到外存(换出),再将外存中某个进程的地址空间读入到内存(换入)。(换入换出大 ...
【操作系统】第三章:连续内存分布
3.1 计算机体系结构及内存分层体系
操作系统结构
CPU:完成基本的对程序或软件的控制
内存:放置程序代码和他处理的数据
外设
操作系统功能
操作系统管理内存的方法
程序重定位
分段
分页
虚拟内存
按需分页虚拟内存
3.2 地址空间和地址生成地址空间定义
物理地址空间 — 硬件支持的地址空间(主存和磁盘)
逻辑地址空间— 一个运行程序所拥有的内存范围(一维的线性空间)
地址生成
逻辑地址的生成
物理地址的生成
CPU方面
计算器需要在逻辑地址的内存内容
内存管理单元寻找在逻辑地址和物理地址之间的映射
控制器从总线发送在物理地址的内存内容的请求
内存方面
内存发送物理地址内存的内容给CPU
操作系统方面
建立逻辑地址和物理地址之间的映射
地址安全检查3.3 连续内存分配内存碎片问题当我们给正在运行的程序分配空间之后,会出现一些空闲的空间(碎片)不能被利用
外部碎片
在分配单元间未使用的内存(程序空间之间的碎片)
内部碎片
在分配单元中的未使用内存(在分配给程序的空间内部出现的碎片)
分区的动态分配
简单的内存管理方法 ...
【操作系统】第七章:进程和线程
7.1 进程的定义
定义:一个具有一定独立功能的程序在一个数据集合上一次动态的执行过程。
进程代表运行的程序的执行过程,需要消耗各种计算机的资源
通过进程可以更好的表示程序的执行过程
进程是程序动态执行的过程
7.2 进程的组成进程的组成
程序的代码
程序处理的数据
程序计数器中的值,指示下一条将运行的指令
一组通用的寄存器的当前值,堆、栈
一组系统资源(如打开的程序)
进程与程序的联系(多对多)
程序是产生进程的基础
程序的每次运行构成不同的进程
进程是程序功能的
通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可以包含多个程序。
进程与程序的区别
进程
程序
动态的
静态的
暂时的
永久的
进程组成包含程序、数据、进程控制块
……
7.3 进程的特点
动态性:可动态的创建、结束进程
并发性:进程可以被独立调度并占用处理及运行
独立性:不同进程的工作不相互影响
制约性:因访问共享数据/资源或进程间同步而产生制约
==程序 = 算法 + 数据结构==
描述进程的数据结 ...
【初探JVM】
JVM是现在面试中的常客,多是些概念性的东西需要把它记住,这个时候可不能拉跨!
先来几道题练练手,心里有个数
请你谈谈你对JVM的理解?
Java8虚拟机和之前的变化更新?
什么是OOM?什么是栈溢出(StackOverFlowError)?怎么分析?
JVM常用的调优参数有哪些?
内存快照如何抓取、怎么分析Dump文件?
谈谈JVM中,类加载器的认识?
……
懵逼了吧,那就来系统学习一波!
在学习的过程中会遇到很多抽象的概念,需要我们结合图式梳理分析,参考下面的网站:
https://www.processon.com/view/5c749debe4b0f9fba6921d15
https://www.processon.com/view/5a7bff4be4b024b99bf5d30f
https://www.processon.com/view/5bc708cde4b08faf8c808c91#map
JVM的位置JVM的体系结构
类加载器作用 加载Class文件
图示
分类
虚拟机自带的加载器
启动(根)加载器(BootStrap)
它不是Java类 ...
【尚硅谷《谷粒商城》2020学习笔记】二、分布式组件
SpringCloud Alibaba一、简介Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
GitHub地址:https://github.com/alibaba/spring-cloud-alibaba
二、主要功能
服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式 ...
【尚硅谷《谷粒商城》2020学习笔记】三、前端基础
前后端技术栈类比
前端
后端
编程语言
JavaScript
Java
版本
ES6、7、8
JDK8、9、10、11
框架
JQuery、Vue、React
Spring、SpringMVC
工具
WebStorm、VsCode
IDEA、Eclipse
项目构建
webpack、gulp
maven、gradle
依赖管理
npm
maven
ES6参考文档:http://caibaojian.com/es6/
一、简介ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
ECMAScript和JavaScript的关系一个常见的问题是,ECMAScript和JavaScript到底是什么关系?
要讲清楚这个问题,需要回顾历史。1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECM ...
【尚硅谷《谷粒商城》2020学习笔记】一、环境搭建与快速开发
前言参考视频:https://www.bilibili.com/video/BV1np4y1C7Yf
相关资料源码:https://shimo.im/docs/8xgTjWvDh6P6tkdx/
环境搭建一、安装 Linux 虚拟机这里我使用了自己购买的阿里云服务器上安装的CentOS 7,所以跳过这一步
没有云服务器的使用 VMWare 或者 VirtualBox 都可
相关知识点可以参考下面的连接,就不再赘述
狂神说Java:https://www.bilibili.com/video/BV187411y7hF?p=3
尚硅谷:https://www.bilibili.com/video/BV1dW411M7xL?from=search&seid=4221493829881452502
二、安装 docker参考docker官网:https://docs.docker.com/engine/install/centos/
1234567891011121314151617181920212223242526272829303132333435363738# 1.卸载 ...
【安全框架系列】
前言在Web开发中,安全是第一位!
在做网站的过程中,安全应该在设计之初就进行考虑。
在以往的开发中,我们可以通过配置一些过滤器与拦截器来实现一些简单的安全操作,但是过滤器和拦截器的使用需要编写大量的原生代码,使得项目过于繁琐,产生冗余
接下来我们学习两个常用的安全框架:SpringSecurity、Shiro
笔记作于跟随 狂神说Java b站视频学习过程中
SpringSecurity简介
官网:https://spring.io/projects/spring-security
官方文档:https://docs.spring.io/spring-security/site/docs/5.3.3.BUILD-SNAPSHOT/reference/html5/
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。 它是用于保护基于Spring的应用程序的实际标准。 Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。 与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满 ...
【Vue快速入门】
在成为真正的“全栈工程师的”的路上,前端必不可少,在学习完前端三件套(HTML、CSS、JavaScript)、jQuery之后,我们正式步入 前端框架Vue 的学习,Vue是时下流行的前端三大框架(Vue、React、Angular)之一,是前端框架优势的集大成者,这篇笔记作于跟随 bilibili 《【狂神说Java】Vue最新快速上手教程通俗易懂》的学习过程中。
1. SSM回顾
2. Vue简介
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架(逐步实现新特性)。
Vue 只关注视图层, 采用自底向上增量开发的设计。
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
3. 快速入门1. IDEA安装插件
2. 导入Vue.jsCDN网址:https://www.bootcdn.cn/vue/
源代码:cdn.jsdelivr.net/npm/vue
12345<!-- 学习过程中使用 --><script src="https://cd ...