首页 > 其他分享 >《操作系统导论》-0-序章

《操作系统导论》-0-序章

时间:2022-12-26 14:46:59浏览次数:33  
标签:操作系统 虚拟化 int 导论 helloWorld 序章 内存 include

前言

全书的内容围绕虚拟化并发持久性三个主要概念

值得开心的是,本书课程项目除了系统编程项目外,还可以配合着大名鼎鼎的MIT 6.828自行实现xv6操作系统食用

摘录一段最后的话:

叶芝有一句名言:”教育不是注满一桶水,而是点燃一把火“。他说得既对也错——你必须"给桶注入一点水"

但是,叶芝的主要观点显而易见:教育的真正要点是让你对某些事情感兴趣,可以独立学习更多关于这个主题的东西,而不仅仅是你需要消化什么才能在某些课程上取得好成绩。

因此,教育过程的真正意义在于:前进,学习许多新的和引人入胜的主题,通过学习不断成熟,最重要的是——找到能为你点火的东西。

概述

自问环节:什么是操作系统?

硬件资源的管理者,同时也是用户使用计算机资源(软件和硬件)的媒介

当然,不仅仅如此,它还做了很多额外的工作,使得计算机能够正确且高效地运行

具体做了哪些工作?解决了什么问题?如何解决的?可能这就是我学习的目标

helloWorld.c

鉴于本课程的实验中要用到C编程(虽然我没系统学过,但是我有Java和C++基础,所以我觉得可能问题有,但是不大),让我先用Linux写一个HelloWorld.c

vim没自动补全/_ \

#include <stdio.h>

int main(){
        printf("Hello world!\n");
        return 0;
}
# 编译 -o原来是指定目标文件名
gcc -o helloWorld helloWorld.c
# 执行(执行完我发现应该输出一个换行符的)
./helloWorld

虚拟化

虚拟化CPU

虚拟化CPU让单核计算机有了(似乎)能够并行多个程序的能力

虚拟化内存

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "common.h"

int main(){
        int intSize = sizeof(int);
        printf("the size of int is:",intSize,"\n");
        int *p = malloc(intSize);// 申请一个int大小的内存空间
        assert(p!=NULL);
        printf("(%d) memory address of p:%08x\n",getpid(),(unsigned)p);// 这个%08x是个什么东西
        *p=0;
        while(1){
                Spin(1);
                *p+=1;
                printf("(%d)p:%d\n",getpid(),*p);
        }
        return 0;
}

那vim写着实有点费劲儿,要不我还是vscode吧

这样只申请不释放不会有内存泄漏问题吗

// 我觉得不太好,所以改动了点   
        for(int i = 0;i<15;i++){
                Spin(1);
                *p+=1;
                printf("(%d)p:%d\n",getpid(),*p);
        }
        free(*p);

哎呀我去,疯狂报错,common.h文件也没给,跳!

总之就是同时运行多个实例时,会发现申请到的起始地址是相同,实际上本不应该这样,因为程序是共享物理内存的

这就是想向我们展示虚拟内存——让每个程序都能够访问自己独立的、私有的、虚拟内存地址空间

实际上操作系统的做法是加了一层内存地址映射

并发

如何构建正确的并发程序?同理还有多线程程序设计中的并发问题

持久性

如何持久地存储数据?

设计目标

现在你已经了解操作系统实际上做了什么:

它取得CPU、内存或磁盘等物理资源,并对他们进行虚拟化,以满足实际需求并提高资源利用率

它处理与并发有关的麻烦且棘手的问题

它持久地存储文件,从而使它们长期安全可用

基本目标是建立一些抽象,让系统方便和易于调用;另一个重要目标是提供高性能,换言之——最小化操作系统的开销(并在必要时进行折中);此外,在应用程序之间以及在OS和用用之间提供保护也很重要,确保它们能够各自独立、互不影响地运行——这便是”隔离“;最后,操作系统还要提供足够的可靠性、安全性等其他目标

简单历史

  • 早期批处理的时代,操作系统只是一些库,提供了诸如IO一类的API

  • 然后慢慢意识到操作系统和普通程序不应该是一样的,于是系统调用(管态/内核模式)的概念产生了,操作系统也不再仅仅是普通的库

  • 然后是多道程序时代,这时候已经注意到处理IO时CPU闲置带来的时间浪费,以及多道程序运行过程中的内存保护、并发等问题

    同时这一时期的主要进展时Unix操作系统的诞生

  • 最后终于来到了个人计算机的时代

结语

最后,本书中不涉及的操作系统的部分包括:网络、图形、深入的安全问题

标签:操作系统,虚拟化,int,导论,helloWorld,序章,内存,include
From: https://www.cnblogs.com/yaocy/p/17005746.html

相关文章