Linux操作系统学习笔记

本文详细介绍了Linux操作系统的起源,包括UNIX系统和MINIX对Linux的影响。接着,深入讲解了Linux的内存管理机制,如虚拟内存、堆栈管理、映射函数。然后,探讨了系统调用、文件I/O以及信号处理的基本概念和常用函数。最后,提到了Linux的信号来源、处理方式以及定时器的相关内容。
摘要由CSDN通过智能技术生成

UNIX系统介绍:
    最早版本于1970年左右诞生于美国贝尔实验室,作者是丹尼斯.里奇、肯.汤姆逊
    最早的多用户、多任务、支持多种CPU架构
    具备高安全性、高可靠性、高稳定性
    在构建大型关键性业务的商用服务器中进行使用,也能在嵌入式设备中架设

    Minix是一种基于微内核架构的类UNIX计算机操作系统,并开源给大学教学研究使用,Linux是受其启发

Linux系统介绍:
    Linux,全称GNU/Linux,由林纳斯.托瓦兹在1991年在校园网上发布了第一个Linux内核版本
    是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统
    Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统

相关知识:
    Linux的标志:企鹅,因为企鹅是南极洲的标志性动物而当时南极是没有被任何国家占领,是属于全人类的,符合Linux开源的风格
    GNU组织:通用的非商业的类UNXI,目前全球最大的开源组织,负责维护和开发Linux的内核源
    GPL通用许可证:任何在带有GPL证书的代码的基础上开发、修改出来的软件、代码,也必须支持GPL许可证书,确保开源免费
    POSIX:可移植操作系统接口规范,Linux完全遵循该规范,UNIX极少部分有所不同,但是也基本全部遵循
    Linux内核版本和发行版本:
        Linux只是表示内核是Linux,只要操作系统的内核是Linux,则可以称该系统属于Linux操作系统
        完整的操作系统:内核+Shell+界面软件
        其它公司是在Linux内核的基础上,设计制作出不同样子、特点的Linux发行版,例如:
            Ubuntu、RedHat、CentOS、debian、deepin

GNU编译工具gcc:
   多样化:
        支持多种编程语言、支持各种操作系统
        gcc -v  可以查看是否安装了gcc以及版本信息
    编译构建过程:
        预处理:   gcc -E code.c -o code.i
        编译:     gcc -S code.i  ->code.s
        汇编:     gcc -c code.s  ->code.o
        链接:     gcc a.o b.o ... ->a.out
    文件类型:
        .c .h .i .s .o 
        .h.gch  如果存在会优先使用,应及时删除
            gcc xx.h -c
        .a      静态库文件
        .so     共享库文件
    编译参数:
        -E  -S  -c  -o
        -std=gnu99  或者 -std=c99(不建议)
        -Wall   -Werror
        -L  指定库文件的查找路径
        -I  指定头文件的加载路径
        -l  根据库名指定要加载的库文件 -lm
        -pedantic 配合使用 -ansi 这告诉编译器要严格遵守ANSI标准,如果不符合会产生警告
    
    预处理指令:(是否支持预处理指令由编译器决定)
        #include <>/""
        #define 定义宏常量、宏函数
        #undef 删除宏
        #ifdef/#ifndef/#if
        #elif
        #endif
        
        #pragma pack(n) 设置对齐补齐的最大字节数
        #pragma once    相当于头文件卫士
        #pragma GCC dependency "文件名" 监控文件在上一次编译到这一次编译期间是否有修改,如果有会产生警告
        #pragma GCC poison key  设置key标识符为有毒的,禁止出现该标识符

        #error "提示信息"   提示错误    不会生成可执行文件
        #warning "提示信息" 提示警告
        #line n    设置行号为n,并且会影响后面的行号
            一般都与条件编译配合使用

Linux的内存管理:

一、内存管理的调用关系
    用户层
        STL     自动申请/释放内存   调用C++
        C++     new/delete         调用C
        C       malloc/free        调用POSIX 或者 Linux
        POSIX   brk/sbrk           调用内核kernal
        Linux   mmap/munmap        调用内核kernal
    系统层
        kernal kmalloc/vmalloc      调用驱动
        driver get_free_page

二、进程映像
    程序是存储在磁盘上的可执行文件(二进制文件、脚本文件)
    当执行程序时,系统会自动将该文件加载到内存中,在内存的分布情况称为进程映像
    从低地址到高地址的分区:
        text 代码段
        data 数据段
        bss  静态数据段
        heap 堆
        stack栈
        environ 环境变量表
        argv  命令行参数

        命令:ps -aux 查看当前所有进程信息
            可以查看进程号
        作业:打印出每个内存段中的数据所在的地址,然后与进程的内存信息记录文件中的地址对比
        /proc/进程号/maps

    总结:
    1、栈内存的增长方向,受操作系统影响,大部分是从高地址向低地址增长,但也有些系统例如Ubuntu就是从低地址向高地址增长
    2、如果是栈内存存储数组数据,数组中元素的增长方向一定是从低地址向高地址增长

虚拟内存:
    1、操作系统会为每个进程分配4G的虚拟内存
    2、用户只能使用虚拟内存,不能直接使用物理内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值