当前位置: 首页 > news >正文

编程的思路Linux学习思路

前言

整理部分学习方法,以及对Linux的一些看法

学习的目的和方法

学习是为了建立起一个知识体系.把所有的概念和知识点纳入一个系统.

新的学习内容应当和已有的(已理解)的内容联系起来,把新内容变为"已有"内容.

如果(暂时或永久)找不到联系,那可能是需要记忆的内容.但有时候面对新的内容,并不知道是应该"理解"或者"熟记".所以从这点也可以看出学习本身是循序渐进的过程,基础越扎实,学习难度越低.怎样知道自己对已有知识点熟练掌握了呢?这个比较难说,靠自己感觉.

适当的练习(虽然笔者也不太喜欢)能起到巩固学习效果的作用.很多时候解决问题的方法都是在模仿,建立在做了(并且背诵)很多相关的例子的基础之上---甚至采用"穷举"(所有可能发生的情况都预演过)

程序的内容

从"物理"的角度来看,程序代码是在设计"数据"和"方法"

程序从上到下大致分了四个层级:应用层,框架层,操作系统层(内核),硬件层.不管哪个层,都围绕着"数据"和"方法"

数据

数据是一种描述.描述的内容可以是对象,过程,或者其他内容.

在代码层面,数据的设计过程是:先设计数据类型,填入值后生成数据对象.硬件层面,数据是没有类型的,只有长度---这点在最接近汇编语言的C语言中感受最清楚,在给函数传参数时,基本上不会报错.

数据描述对象

怎样选择对象(简单数据对象)的数据类型,数据对象的取值范围和数据类型相关.例如,用一个bool型变量表示"是"或者"否".一个教室里最多坐30个人,那么这个教室的人数可以用char(取值范围-128到127)或者unsigned char(取值范围0~255)

unsigned char h_number;

复杂类型由简单类型所构成

数据描述过程

过程是描述方法的,过程是由数据的因果关系来描述的.举个例子说明

"数据描述过程"的经典例子是数据库.数据库由若干个表组成.可简单分为"对象表"和"过程表"

例如学生成绩表是一个过程表,如下所示:

学号课目成绩
0001语文95
0001数学99

如果用方法来表示

//C语言,伪代码 short test_faction(int number,char* subject_name){ if(number==0001) if(subject_name=="语文") //字符串比较函数 return .... ; ... }

虽然考试成绩和学号,课目之间没有逻辑上的联系(因果关系),但可以表达出他们相互的关系.

过程表的元组由自变量和因变量组成.一项项展开的数据描述了整个过程.

===========================内容分割线↓=====================================笔者关于数据库部分的内容没再更新,其实从这里可以看出,逻辑角度很容易理解数据库===========================内容分割线↑=====================================

---方法,过程和函数可以理解成是相同的内容

数据是程序的核心

方法

方法表象化为函数.表达一种行为,一种和数据有关的因果关系.

策略,机制和实现

程序的目的是为了解决需求.策略,机制和实现有着以下关系:

需求依赖于策略.

策略是解决问题的方法,依赖于机制

机制表示一种功能,需要实现

实现就是用数据和函数来表达机制.实现是有层级的,上一层的函数封装下层函数.不展开

举个例子:我的需求是吃饭.采用的策略可能是吃米饭或者吃面条.如果选择吃面条,那么需要的功能(机制)有烧水,下锅,下面条.对此水,火,锅,面条怎么来呢?锅和面条可以买,也可以自己生产---自己种小麦,成熟之后碾成面粉再做成面条..

每一本计算机书籍都是在教机制和实现.---这个函数能干什么怎么使用,等等.程序员做的事是依托于机制和实现,组织策略满足需求.自己设计机制行不行呢,那是设计芯片架构(指令集)或者写操作系统内核的人做的事.接近底层要懂得汇编语言

Linux的学习思路

虽然这个命题有点大,如前所述,把学习内容纳入一个系统,所以也是必须要做的.

Linux是一个操作系统,向上往用户(或框架层)提供接口,向下控制包括CPU,内存等硬件,并且负责和硬件通信.很多书上把操作系统看成是一个软件,这种说法有一些不妥.操作系统作为单独的一个"层",包含了本层的全局变量和函数.从操作系统的功能来讲,他应该有不止一个进程(也就是操作系统由多个程序组成),这些进程会共享部分数据和函数.

Linux掌管内存,自身的运行需要占据一定的内存空间.对于加载入内存的其他进程,若访问绝对的地址空间,可能对操作系统数据的错误写入导致系统崩溃.因此有了用户空间内核空间的划分.

用户进程始终要把数据输出到硬件(否则程序将没有意义,所有程序都有输入→计算→输出这三个部分),所以必定要和内核通信(内核是硬件的直接通道),因此有了系统调用.他的作用是在不破坏操作系统的前提下为用户空间提供接口.---此外,编译器(运行于操作系统之上)和操作系统以及系统调用是绑定的(另外的内容).

接下来看Linux是如何管理内存的.首先Linux管理内存的主体是内核.他大概要在加载操作系统的时候分一部分固定的内存给自己---按照绝对地址和某些固定大小去设计一个或多个表,例如中断表等:这些内容有些抽象而且不在书本讨论范围之内.

站在进程地址空间的角度,一是进程地址映像采用了虚拟地址,方便描述进程(每个进程的某些虚拟地址相同),二是用到了内存描述符(struct mm_struct)来表示进程的地址空间.内存描述符的结构,大致是一个"数据索引表".内存描述符又和虚拟内存区域(struct vm_area_struct)相联系---在vm_area_struct对象中有个vm_mm变量(类型是struct mm_struct).两者可以表达出每个段的单元数据---段指的是"数据段"或者"栈段"等.

假设程序里有个全局变量

//C语言 const int count;

他在数据段中占了4字节的大小.可以用一个vm_area_struct对象来表示,里面记录了他的各种信息.注意这两个结构体是"自发"的,就算内核不管理内存,为描述"进程空间"和"数据单元"也应该有.

那么内核又是如何访问这些用户空间的数据呢?在内存描述符中,有个pgd变量描述了进程的基址(虚拟地址,可以转换为物理地址).内核通过MMU(内存管理单元)查询到基址,由此和进程联系起来,因此可以访问到进程中的每个数据.在此基础上实现了内核空间和进程空间的数据访问和修改---系统调用

---上面是关于Linux的一些简单分析,尝试站在内核设计者的角度,看看他们是怎么解决的.

小结

回到前面的思路,为了建立起一个知识体系,除了要知道"是什么",也要知道"为什么".Linux的学习难点在于:

1.Linux本身是个庞大的系统,内容繁多

2.给你一本书,策略,机制和方法同时出现在眼前,要对内容梳理,有的需要记忆,有的需要理解,还要把他们纳入系统.

http://www.jsqmd.com/news/972044/

相关文章:

  • 手把手教你用纯C语言(只用stdio.h)实现SM4国密算法,附完整可运行代码
  • 用51单片机玩转AT24C02 EEPROM:手把手教你I2C时序与代码调试(附Proteus仿真)
  • STM32-编码器接口测速(十七)
  • 厂房设备整体搬迁,找对团队省心又高效
  • 深度自编码器在非线性动力学维度估计中的应用
  • 别再死记硬背了!用Multisim仿真带你玩转电路、模电、数电核心知识点
  • 教资科三音乐教案模板|初中高中音乐教学设计资料
  • 一行代码实现通道混洗:用PyTorch复现ShuffleNet核心操作,并可视化看看它到底怎么‘洗牌’的
  • 神经符号系统中的语义压缩与碰撞模糊问题解析
  • 探讨球场灯口碑哪家好,君力光电如何 - myqiye
  • 07-MCP 上篇:从配置到生产力 —— 给 AI 装上手脚
  • 别再只把DBC当配置文件了!聊聊它在Autosar CAN开发中的三个隐藏用法
  • 抖音视频批量下载全攻略:3步实现去水印、多格式、智能管理
  • 2026AI培训机构汇总,国内综合实力TOP3是这三家
  • 用ESP32做个会说话的温度计:手把手实现ADC读取与TTS语音播报(Arduino框架)
  • 2026年智慧路灯性价比排名,君力光电值得选购吗? - myqiye
  • ArkUI 入门:Text 组件背景属性
  • 第二章 C#的基本语法
  • 用 React 写视频?Remotion 这个库把前端和后期的饭碗一起端了
  • 从PCB布线到天线设计:深入浅出聊聊‘特性阻抗Z0’为什么是射频工程师的命根子
  • Android启动安全实战:手把手教你用avbtool给dtbo分区镜像签名(附完整命令)
  • Qt 高级开发 027: QTabWidget自定义样式表美化实战
  • Swin Transformer vs. CNN:在花卉分类数据集上谁更胜一筹?(实战对比分析)
  • Weka数据预处理实战:用‘Discretize’滤镜搞定连续数据离散化,让模型更稳定(以Iris数据集为例)
  • 保姆级教程:手把手教你通过MySQL官方镜像的entrypoint.sh脚本,自定义数据库初始化流程
  • ROS性能优化:消息压缩技术在机器人开发中的关键应用
  • 2026年广州一拍即火传媒GEO推广价格贵不贵? - myqiye
  • Pluto SDR实战:OFDM系统中‘高原现象’与频偏补偿的深度解析
  • 雪亮工程全面升级|国标GB28181视频平台EasyGBS赋能视频监控,筑牢基层治理 “千里眼”
  • Protege新手避坑指南:用Cellfie插件从Excel导入数据时,这4个报错我帮你踩过了