操作系统导论

Hello World

  1. 安装gcc用来编译c代码
bash 复制代码
sudo yum install gcc
  1. 编写Hello World
c 复制代码
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
  1. 使用gcc编译
    -o 是指定出处文件的名字------也就是编译完的文件会叫hello
bash 复制代码
gcc hello.c -o hello
  1. 运行
    ./hello运行

开篇

虚拟化CPU

  1. 编写一段代码,效果为反复打印用户启动程序时传入的字符串
    vim cpu.c
c 复制代码
#include <stdio.h>
#include<stdlib.h>
#include<unistd.h>
void spin(int seconds){
        usleep(seconds *1000000);
}
int main(int argc,char *argv[]) {
    if(argc!=2){
        fprintf(stderr,"usage:cpu<string>\n");
        exit(1);
    }
    char* str=argv[1];
    while(1){
        spin(1);
        printf("%s\n",str);
    }

    return 0;
}
  1. 编译
    gcc -o cpu cpu.c
  2. 启动一个
    ./cpu A
  3. 同时启动多个
    ./cpu A & ./cpu B & ./cpu C & ./cpu D
  4. 终止运行
    killall cpu

虚拟化内存

并发

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h> // 确保包含pthread库的头文件

volatile int counter = 0; // 共享计数器,使用volatile以防止编译器优化
int loops; // 每个线程要执行的循环次数

// 工作线程的函数
void *worker(void *arg) {
    int i;
    for (i = 0; i < loops; i++) {
        counter++; // 增加共享计数器
    }
    return NULL;
}

int main(int argc, char *argv[]) {
    if (argc != 2) { // 检查命令行参数
        fprintf(stderr, "usage: threads <value>\n");
        exit(1);
    }

    loops = atoi(argv[1]); // 从命令行参数获取循环次数
    pthread_t p1, p2; // 创建两个线程标识符

    printf("Initial value : %d\n", counter); // 打印初始计数器值

    // 创建两个线程
    pthread_create(&p1, NULL, worker, NULL); 
    pthread_create(&p2, NULL, worker, NULL); 

    // 等待两个线程完成
    pthread_join(p1, NULL); 
    pthread_join(p2, NULL); 

    printf("Final value : %d\n", counter); // 打印最终计数器值
    return 0;
}

加互斥锁

c 复制代码
#include <pthread.h>

pthread_mutex_t lock; // 声明一个互斥锁

void *worker(void *arg) {
    int i;
    for (i = 0; i < loops; i++) {
        pthread_mutex_lock(&lock); // 加锁
        counter++;
        pthread_mutex_unlock(&lock); // 解锁
    }
    return NULL;
}

int main(int argc, char *argv[]) {
    pthread_mutex_init(&lock, NULL); // 初始化互斥锁
    ...
    pthread_mutex_destroy(&lock); // 销毁互斥锁
}

持久化

相关推荐
OpenAnolis小助手1 小时前
开源生态发展合作倡议
开源·操作系统·龙蜥社区·龙蜥·openanolis
OpenAnolis小助手7 小时前
Cloud Kernel SIG 月度动态:发布ANCK 5.10-017.3小版本,引入SMC、TDX等多项特性
操作系统·龙蜥社区·龙蜥sig·anolisos·openanolis
敲上瘾10 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
不爱学习的YY酱1 天前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
钰爱&1 天前
【操作系统】Linux之网络编程(UDP)(头歌作业)
linux·操作系统
清酒伴风(面试准备中......)1 天前
操作系统基础——针对实习面试
笔记·面试·职场和发展·操作系统·实习
架构师Wu老七6 天前
【软考】系统架构设计师-计算机系统基础(2):操作系统
系统架构·操作系统·软考·系统架构设计师
不爱学习的YY酱6 天前
【操作系统不挂科】<线程概念(6)>选择题&简答题(带答案与解析)
linux·开发语言·操作系统
修修修也9 天前
【Linux】进程间通信
linux·运维·服务器·操作系统·进程通信
Pandaconda11 天前
【操作系统】每日 3 题(十八)
linux·服务器·开发语言·数据结构·笔记·后端·操作系统