• 操作系统启动过程


    linux 系统

    linux 基础环境配置

    linux下编程代码实验 CMake/Make/Shell/Multi-thread/socket/stl/awk

    linux 软硬件驱动

    Linux程序设计 中文版 第四版

    Linux中国翻译项目

    Vim Practice

    Linux命令必知必会

    Unix环境高级编程 代码&学习笔记

    ubuntu deb软件包搜索下载

    系统编程:Makefile的编写、进程线程区别以及控制、生产者消费者模型、System V标准和POSIX标准中的IPC间通信、简单Shell脚本的编写;网络编程:基于TCP/UDP的客户端/服务器、socket、高级I/O、select/poll/epoll、Http协议

    开机启动软件&执行命令

    将要执行的命令添加到/etc/rc.local中即可
    
    sudo vi /etc/rc.local
    注意命令要写在exit 0之前
    
    • 1
    • 2
    • 3
    • 4

    开发工具

    必备IDE 
    clion:C++开发平台
    pycharm:Python开发平台
    
    • 1
    • 2
    • 3

    apt-fast:更快速的软件管理

    安装过程会进入一个图形界面,配置线程数等信息,全部默认即可

    sudo add-apt-repository ppa:apt-fast/stable
    sudo apt-get update
    sudo apt-get -y install apt-fast
    以后安装应用,把apt-get直接替换成apt-fast即可,例如安装vlc
    
    sudo apt-fast install vlc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    vlc万能播放器:支持倍速播放

    sudo apt-get install vlc

    terminator多tab终端:黑客必备

    sudo apt-get install terminator

    chrome浏览器:最好的浏览器,没有之一

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

    sudo dpkg -i google-chrome*.deb; sudo apt-get -f install

    vim:编辑器之神

    sudo apt-get install vim

    常用软件

    stardict:星际译王,翻译软件

    chrome - Google浏览器

    typora - Markdown编辑器

    git & smartgit 界面版本管理工具

    zsh:更强大的Shell

    sh -c “$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)”

    eek - GIF录制工具

    inkscape - 矢量图工具

    WPS

    环境工具

    anaconda - Python集成环境

    Anaconda自带的conda环境工具可以用来的创建或删除虚拟环境,方便我们切换不同版本的虚拟python运行环境,更重要的是可以加快我们加载环境的速度,方便切换不同版本的pip依赖库。

    ROS - 机器人操作系统

    ursim - UR模拟器

    nvm - Node版本管理

    SimpleScreenRecorder - 屏幕录制工具

    操作系统启动过程

    1. bootloader bootasm.S 使能A20 加载全局描述符表GDT 使能并进入保护模式 调用bootmain
    2. bootmain.c 从硬盘读取ELF格式的os,以程序块格式存入内存,跳转到 操作系统入口函数处, kern/init.c中的kern_init函数
    3. ucore就接管了整个控制权, kern/init.c中的kern_init函数 ucore主要完成的工作包括:
    
        a. 初始化终端;
        b. 显示字符串;
        c. 显示堆栈中的多层函数调用关系;
        d. 切换到保护模式,启用分段机制;
        e. 初始化中断控制器,设置中断描述符表(IDT),初始化时钟中断,使能整个系统的中断机制;
        f. 执行while(1)死循环。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    基础知识

    c内联汇编

    // lab0_ex1.c
    int count=1;
    int value=1;
    int buf[10];
    void main()
    {
    // 内联汇编-----扩展内联汇编	
       asm(
    // __asm__( 也可以,避免冲突
      "cld \n\t"
            "rep \n\t"					     
            "stosl"
      :               # 输出 output operands 
                            # 无内容 表示没有输出结果的数据操作 . 
      : "c" (count), "a" (value) , "D" (buf[0]) # 输入 input operands
                            # 每个操作数(括号里C语言的变量)
                            # 都有一个限制符("" 中的内容)加以描述.  a代表使用   寄存器%eax存储
                            #                                      c代表使用   寄存器%ecx存储 
                            #                                      d代表使用   寄存器%edx存储
                            #                                      D代表使用   寄存器%edi存储
                            # 冒号用来分割输入的操作和输出的操作.
                            # 如果每组内有多个操作数,用逗号分割它们.  
                            # 操作数最多为10个, 或者依照具体机器而异 .
                            #  括号里的若干操作数,依次对应%0,%1。。。等
      :               # 寄存器变化表 list of clobbered registers  
                            # "%ebx", "%edi"   
          );
    }
    // 这段内嵌汇编把 value, count装入寄存器
    // 双引号内的“限制符”是一个规定的格式。
    // 在输出操作中,这个限制符会额外多一个符号(=)。
    // 限制符主要用来决定操作数的寻址方式。
    // 同时还可指定使用某一个寄存器。
    // 参考博客 https://www.cnblogs.com/whutzhou/articles/2638498.html
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    寄存器名称限定符

    +---+--------------------+  
    | r |    Register(s)     |  
    +---+--------------------+  
    | a |   %eax, %ax, %al   |  
    | b |   %ebx, %bx, %bl   |  
    | c |   %ecx, %cx, %cl   |  
    | d |   %edx, %dx, %dl   |  
    | S |   %esi, %si        |  
    | D |   %edi, %di        |  
    +---+--------------------+  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其他一些限定符

    1. "m":对内存的操作被允许,用一个合法内存空间来做操作数。
    2. "o":对内存的操作被允许,但是必须支持地址偏移值,
            即,对于给出的地址,加上一个偏移量,此时也是一个合法的地址。
    3. "V":对内存的操作被允许,但是不支持偏移量。
            也就是说,支持“m”限制符,但不支持“o”的那些地址。
    4. "i":对立即整数(const,常值)的操作被允许,
            这个常值可以是运行到汇编内才被赋值。
    5. "n":对立即整数的操作被允许。
            许多系统不支持汇编中的操作数小于一个字宽,对于这些操作数,应该使用“n”而非“i”。
    6. "g":任意寄存器,内存,立即数都被允许。
            除了非通用寄存器。
            eax,ebx,ecx,edx或内存变量
    7. "q":从eax, ebx, ecx, edx分配寄存器。 
    8. "r":从eax, ebx, ecx, edx, esi, edi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    前端JS for循环内异步接口变成同步提交(JavaScript for循环异步变同步)
    【Linux】关于系统安装
    CompletableFuture-FutureTask
    flex布局中父元素常用属性总结
    sql实例-2
    硕士开题报告模板、博士专家推荐信、科研课题申报模板大全
    使用Java NIO进行文件操作、网络通信和多路复用的案例
    小小逻辑判断符的错误使用,资损几万块
    Python可视化 | Python可视化进阶必备 - plotly
    fscan使用方法:一键自动化、全方位漏洞扫描的开源工具
  • 原文地址:https://blog.csdn.net/RuanJian_GC/article/details/132866936