说是第三天,我看了该一个星期了.. 发现之前看得有点浮躁,最近看了费曼读书法有了新的想法,不怕慢,就怕没看明白,所以听费曼的,每次看卡壳了,就返回去重新看..

看到这里,突然觉得还是以《64 位》为主比较好,《32 位》太老了,用的还是 nask 转换起来有点累,并且《64 位》介绍得细啊,所以我悟了,《32 位》用来打辅助吧..

1 软盘与 FAT12

先来看软盘,一个 PC 里面可以有多个软盘,一个软盘里面包含 2 个磁头,80 个柱面,18 个扇区。因为软盘正反面都可以存储数据,所以有俩磁头去读取数据。柱面参考下图 (注意编号 0~79),英文是 cylinder;扇区参考下图 (注意编号 1~18),英文是 sector

Read more »

第二天的内容本该是,学习一些汇编指令和 Makefile,在这之前我觉得有必要好好看看 CPU 结构,自古操作系统和组成原理就分不开啊

面向总线的计算机组成示意图。中央处理器,从主存储器中逐条进行取指令,分析指令和执行指令。计算机各组件通过总线连在一起,总线是一些平行导线的集合,用来传递地址,数据和控制信号,可以在 CPU 之外连接 CPU,存储器及 IO 设备;也可以在 CPU 内部连接 CPU 的各个组成部分。

Read more »

这是 30 天的第一天内容,也不知道自己能坚持到几天,有几天就几天了,活这么久了,半途而废的事情还少吗?

首先需要准备几个工具

1 qemu

不可能真去买个软盘什么的,所以我们需要一个虚拟计算机的东西——QEMU

Read more »

学习嘛,当然要有浓厚的兴趣先,所以需要百度学习了一下,按下电源键之后的故事。操作系统这玩意虽说玄乎,但是参考资料还是很多的

参考书籍是《30 天自制操作系统》和《一个 64 位操作系统的设计与实现》,以 30 天为主,但是这玩意用的是 Windows 环境,这显然是不友好的,最终选择环境位 Ubuntu18,能换的都换换呗

Intel 手册:Intel® 64 and IA-32 Architectures Software Developer Manuals

Vol1:用来介绍 Intel x86 平台的基本架构和执行环境。

Vol2:介绍 x86 指令,学汇编的时候可以参考啊

Vol3:介绍 x86 系统编程的基础,包括内存管理、保护、任务管理、中断和异常处理、多处理器支持、散热和电源管理功能、调试、性能监控、系统管理模式、虚拟机扩展 (VMX) 指令、英特尔虚拟化技术 (Intel VT) 和英特尔软件防护扩展 (Intel SGX)。

Vol4:介绍 x86 CPU 上的 MSR,是 CPU 内部的一组特殊的寄存器(这个是从原来的 Vol3 中独立出来的)。

Read more »

手里就一台笔记本,可不想把系统换成 Linux 的,毕竟有很多操作还是很不方便,但是又想学习学习 Android 源码,所以,总得找点什么凑活着用的办法,于是我把目光放到了 Win10 上的 Linux 子系统上了,也就是 WSL,毕竟虚拟机太废内存划不来,亲测

CPU:AMD Ryzen 7 4800H with Radeon Graphics 2.90 GHz

RAM:16G

ROM:512G SSD + 2T HDD

GPU:GTX 1650

跑起来不说多么流畅,反正不卡,可能编译慢点,咱也不差那点时间,硬盘预留个 256G 的空间就够了。话不多说,记录一下这次操作的经历..

Read more »

这篇笔记主要是对 C/Cpp 一些知识的补充,这篇笔记过后就是抽象机制以及一些库函数的学习了

1 源文件与程序

一个 C 语言文件到可执行文件,中间经历了什么?预处理 (Preprocessing)、编译 (Compilation)、汇编 (Assemble)、链接 (Linking)。这是耳熟能详的几个过程,甚至还能敲出对应的 gcc 命令,那么实际上到底是啥情况呢?比如现在有个 C 程序

1
2
3
4
5
#include <stdio.h>
int main(void) {
printf("Hello World!\n");
return 0;
}

敲出 gcc 的命令:gcc main.c -o main.o -v

Read more »

1 初始化

对象的声明可以通过初始化的过程获得初始值。主要就是见识一下 C/Cpp 里面几种初始化的形式,免得大惊小怪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// C语言的初始化还好,怎么着都得有个 =
int a[3] = {1, 2, 3};
int b = 0;
int c = {1}; // scalar initialization

typedef struct {int a[3], b;} MyType;
MyType mm = {{1}, 3};

char* ptr = malloc(10);

// Cpp多了一个花样
int a[3] {1, 2, 3};
int b {0};
typedef struct {int a[3], b;} MyType;
MyType mm {{1}, 3};
auto *m = new MyType;
auto *m1 {new MyType()};
Read more »

数组和指针一般不能分开,尤其是 C 语言里面,让人又爱又恨的东西.. 而一谈到这俩玩意就得画图..

1 数组

对数组下定义,抱歉,我不会。但是我有词典,a way of organizing and storing related data in a computer memory。这么一看就清晰多了

元素类型为 char 的数组可以如下声明

int c[6]; // 可以存6个整数的数组

在声明中[]表示 xxx 的数组,所有数组下标都是从 0 开始,计算机中很多东西都是从 0 开始,为什么?搜索一下吧。数组的大小,就是那个 6,必须得是个常量表达式,这么看,数组一旦定义好了大小就定下来了呀

数组名也是标识符,也要符合规则,不能和其他变量重名

数组初始化的时候可以部分初始化,也可以整体初始化;赋值的时候不能整体赋值,只能单个元素得赋值 (数组拷贝,那个不算)

Read more »

1 Prepare

You need a server. My server OS is CentOS 7.2. You can also use other versions of Linux. Ok, let's get started.

1
2
3
4
5
6
7
su
yum install git # config your git
git config --global user.name=UserName
git config --global user.email=xx@yy.zz
mkdir /usr/local/apps
mkdir ~/tmp
cd ~/tmp

2 Install Golang

Read more »

参考:

https://www.cnblogs.com/opsprobe/p/9420502.html

https://blog.csdn.net/lassewang/article/details/9159543

0 RADIUS

RADIUS:(Remote Authentication Dial In User Service)中文名为远程用户拨号认证服务,简称 RADIUS,是目前应用最广泛的 AAA 协议(认证、授权和计费)

202205243456723

图中 Device(例如交换机)向远程接入用户提供接入及与 RADIUS 服务器交互的服务。RADIUS 服务器上则存储用户的身份信息、授权信息以及访问记录,对用户进行认证、授权和计费服务

认证过程如下

(1)客户端向接入设备发送一个 EAPoL-Start 报文,开始 802.1x 认证接入;

(2)接入设备向客户端发送 EAP-Request/Identity 报文,要求客户端将用户名送上来;

Read more »