bjmayor 发布于 2022-01-24

虚拟化内存

[TOC]

内存介绍

虚拟化内存

设计目标

目标:

  1. 透明, 这里指运行的程序感知不到内存被虚拟化的事实,相反,程序的行为就好像它拥有自己的私有物理内存。
  2. 效率 这里依赖硬件。譬如TLB, 主要消耗是虚拟地址转为实际物理地址。
  3. 保护 即程序不能访问它的地址空间之外的任何内容。从而也实现了隔离。

阅读全文 »

bjmayor 发布于 2022-01-22

go并发模式: Context

go并发模式: Context

原文链接

介绍

在 Go 服务器中,每个传入请求都在其自己的 goroutine 中处理。请求处理程序通常会启动额外的 goroutine 来访问数据库和 RPC 服务等后端服务。处理请求的一组 goroutine 通常需要访问特定于请求的值,例如最终用户的身份、授权令牌和请求的截止日期。当请求被取消或超时时,所有处理该请求的 goroutines 都应该快速退出,以便系统可以回收它们正在使用的任何资源。

在 Google,我们开发了一个context包,可以轻松地将请求范围的值、取消信号和截止日期跨 API 边界传递给处理请求所涉及的所有 goroutine。该软件包作为context公开可用 。本文介绍了如何使用该包并提供了一个完整的工作示例。

阅读全文 »

bjmayor 发布于 2022-01-11

go工具链

[TOC]

交叉编译

交叉编译

通过go env GOARCH 可获取到当前平台的架构。一般有 amd64,386,

mac上编译linux和windows二进制

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

阅读全文 »

bjmayor 发布于 2021-12-10

调度: 多级反馈队列

多级反馈队列

Multi-level Feedback Queue = MLFQ

如名字所示,解决思路就是将任务分级。

分成多个队列,每个队列的优先级不同,调度程序永远先运行完高优先级中的任务,再运行低优先级队列中的任务。

同一队列有多个任务时,轮转运行。

一个任务只能存在于一个队列中。

MLFQ调度策略的关键在于如何设置优先级。

阅读全文 »

bjmayor 发布于 2021-12-09

基本调度策略

调度

调度策略

先做基本假设

  1. 每个工作运行相同的时间。
  2. 所有的工作同时到达。
  3. 一旦开始,每个工作保持运行直到完成。
  4. 所有的工作只是用CPU(无I/O操作)
  5. 每个工作的运行时间是已知的。

定义衡量指标。

  1. 周转时间。 = -
  2. 响应时间。 = -

这2个指标其实是互相矛盾的,不同同时最优。

阅读全文 »

bjmayor 发布于 2021-12-08

cpu如何维护自己控制权的

cpu如何维护自己控制权的

[TOC]

关键概念

用户模式:受限的指令。

内核模式:所有指令

有些操作需要用到特权指令,这个只有在内核模式下才可以运行。

操作系统重获控制权有3种方式:

  1. 进程进行系统调用
  2. 进程出错,如访问了非法内存等。
  3. 时钟中断。

其中时钟中断很重要,是硬件支持。如果没有时钟中断,然后进程又不进行系统调用,也不出错(譬如:啥也不干的无限循环),这样操作系统无法获得控制权。

阅读全文 »