自制操作系统(一) Hello, OS World!


今天开始学习自制操作系统课程,任务是搭建实验环境和简单了解汇编基础语法。 本次使用环境版本如下: https://gitee.com/zj1007/img/raw/master/img/image-20231206181209298.png

  • Ubuntu 23.10
  • VScode 1.84.2
  • VirtualBox 7.0.6

如果使用Windows环境建议安装msys2或WSL,以便在Windows中使用Linux命令工具。

安装nasm汇编工具

# ubuntu安装nasm汇编编译器
sudo apt install nasm
# 也可以在Windows+msys2环境中使用pacman包管理器安装
# pacman -S nasm
nasm -v
# 显示版本表示安装完成
NASM version 2.16.01...

Read more

《Redis 设计与实现》读书笔记(二) 链表


链表

​ 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。

​ 作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为 Redis 使用的 C 语言并没有内置这种数据结构,所以 Redis 构建了自己的链表实现。

​ 链表在 Redis 中的应用非常广泛,比如列表键的底层实现之一就是链表:当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis 就会使用链表作为列表键的底层实现。

​ 举个例子,以下展示的 integers 列表键包含了从 11024 共一千零二十四个...

Read more

创建swapfile


Linux中的swap分区是一种虚拟内存,主要作用如下:

1、扩展内存容量:通过将不常用的内存数据移动到swap分区,可以为系统提供更多的可用内存空间。

2、提高系统性能:当物理内存不足时,系统可以使用swap分区作为额外的内存资源,从而提高系统的性能。

3、管理内存碎片:通过将不常用的内存数据移动到swap分区,可以避免物理内存中出现大量的内存碎片,从而提高内存的使用效率。

创建swap文件

#使用dd创建swap文件/data/swapfile,大小为1G
dd if=/dev/zero of=/data/swapfile bs=1M count=1024
#---或---
#使用f...

Read more

《Redis 设计与实现》读书笔记(一)简单动态字符串


Redis 设计与实现

_images/cover.png

《Redis 设计与实现》一书全面而完整地讲解了 Redis 的内部运行机制, 对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍, 展示了这些功能的核心数据结构以及关键的算法思想。 通过阅读本书, 读者可以快速、有效地了解 Redis 的内部构造以及运作机制, 从而学会如何更高效地使用 Redis 。

购买本书请访问: 京东商城互动出版网(china-pub)亚马逊当当网 , 另外本书的 Kindle 版本多看阅读版本豆瓣阅读版本 也已有售。

第一部分:数据结构与对象

Redis 数据库里面的每个键值对(key-...

Read more

mysql简单备份脚本


mysql备份shell脚本

vim /root/mysql_bak.sh
#!/bin/bash

#保存备份个数,备份7天数据
number=7
#备份保存路径
backup_dir=/data/bak
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#地址
database_ip=127.0.0.1
#用户名
username=xxx
#密码
password=xxx
#将要备份的数据库
database_name=xxx

#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
    ...

Read more

1Panel替代宝塔的简单运维面板


1Panel 现代化、开源的 Linux 服务器运维管理面板

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括:

  • 快速建站:深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定;
  • 高效管理:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;
  • 安全可靠:基于容器来管理和部署应用,最小漏洞暴露面,提供防火墙和日志审计等功能;
  • 一键备份:支持一键备份和恢复,备份数据到各类云端存储,永不丢失;
  • 应用商店:精选各类高质量开源工具和应用软件,助力您轻松安装和升级。

快速开始...

Read more

epoll案例


C语言版

#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

#define MAX_EVENTS 10
#define BUFFER_SIZE...

Read more

C语言简单无向图实现


//
// Created by ZJ on 2023/11/21.
//
#include <stdio.h>

#define MAX 100

// 定义图的结构体
typedef struct {
  int n;            // 图中顶点的个数
  int am[MAX][MAX]; // 邻接矩阵
} Graph;

// 初始化图
void init_graph(Graph *g, int n) {
  g->n = n;
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j ...

Read more

C++protobuf基础


简介

protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python 等,每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

安装

# 下载
wget https://github.com/protocolbuffers/...

Read more

C网络编程(一)


操作系统Ubuntu 22.04 编译器gcc-11

server.c

//
// Created by ZJ on 2023/11/20.
//
#include <arpa/inet.h> // linux中ip地址port端口类型转换库 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h> // linux socket 相关函数库
#include <unistd.h> // read wri...

Read more