首页 > 其他分享 >第一周学习笔记

第一周学习笔记

时间:2022-09-04 22:44:40浏览次数:52  
标签:文件 第一周 代码 映像 笔记 学习 Unix Linux 节点

任务

知识点归纳以及自己最有收获的内容 (3分)
问题与解决思路(2分)
实践内容与截图,代码链接(3分)
...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)

知识点归纳:
学习目标:
1,为学生提供高级编程所需的背景知识和技能
程序开发步骤,包括汇编器,链接器,链接库,可执行文件内容,程序执行印象等
2,让学生能够再现实生活中应用动态数据结构
通过多层次的函数调用来显示一个程序的栈内容;
实现参数可变的类printf函数;
实现一个二叉树来模拟Unix/Linux文件系统树;
运用各种编程技术,如字符串标记化,搜索树节点等;
使用二叉树遍历算法将二叉树保存为文件,并根据保存的文件重构二叉树
3,理解进程概念和进程管理
创建进程,调度进程,切换进程,维护进程等;
fork(),exit(),wait(),exec();
4,并行计算和并发编程
Pthreads 2017;
使用用户级线程,实现线程同步工具;
5,定时器和定时功能
实现支持并发任务的间隔定时器
6,信号,信号处理和进程间通信
理解程序异常和进程间通信;
使用Linux信号和管道实现一个进程间通信机制;
7,文件系统
存储设备、Unix\Linux内核中的文件系统支持、文件操作的系统调用、库I/O函数等;
8,TCP/IP和网络编程
TCP\IP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型。

Unix发展历史

  • AT&T Unix
  • Berkeley Unix
  • HP Unix
  • IBM Unix
  • Sun Unix

Linux版本

  • Debian Linux
  • Ubuntu Linux
  • Linux Mint
  • 基于RPM的Linux
  • Slackware Linux

安装VMware并在虚拟机上安装虚拟机

Linux的使用

Linux内核映像
Linux内核映像位于/boot目录中,一个可启动的Linux内核映像由三部分组成: |BOOT|SETUP|linux kernel|
Linux启动程序
GRUB和LILO
Linux的启动
定位Linux内核映像文件
加载BOOT+SETUP至实模式内存的0x90000处
加载Linux内核至高端内存的1MB处
将初始ramdisk映像initrd加载到高端内存中
转移控制权,运行0x902000处的SETUP代码,启动Linux内核
Linux运行级别
Linux内核以单用户模式启动,以多用户模式运行。
登录进程
三个文件流stdin、stdout、stderr,等待用户登录。
命令执行
执行命令解释程序sh,后者将提示用户执行命令。

Unix/Linux文件系统组织
Unix/Linux文件系统采用树形组织结构

文件类型

目录文件
非目录文件(REGULAR常规文件或者SPECIAL特殊文件)

常规文件(ORDINARY普通文件)
特殊文件

字符特殊文件:字符I/O
块特殊文件:块I/O
其他类型

符号链接文件

文件路径名
Unix/Linux文件系统树的根节点称为根目录
以“/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路径名。

Unix/Linux命令

命令实践

Linux手册页
所有手册均为压缩。gz文件,可通过满程序读取手册文件
man ls: 显示man1中ls命令的手册页。
man 2 open: 显示man2中open函数的手册页。
man strtok: 显示man3中strtok函数的手册页等。
man 3 dirname:显示man3(而非man1)中dirname函数。

Unix/Linux 系统管理
用户账户
添加新用户
sudo adduer username

第2章 编程背景

Linux中的文本编辑器
vim
命令模式:用于输人命令。
插入模式:用于输入和编辑文本
末行模式:用于保存文件并退出
要输入文本进行编辑,用户必须输入i(插入)或a(追加)命令将vim切换到插入模式:
i:切换到插入模式,插入文本。
a:切换到插入模式,追加文本。
要退出插入模式,请按ESC键一次或多次。在命令模式下,输入“;”进入末行模式。将文本保存为文件或退出vim:
:w:写入(保存)文件。
:q:退出 vim。
wq:保存并退出。
q!:不保存更改,强制退出。

gedit
Ubuntu及其他使用GNOMEGUI用户界面的Linux的默认编辑器。

程序开发
C语言程序中的变量可分为全局变量,局部变量,静态变量,自动变量和寄存器变量

gcc把源文件转成二进制可执行文件
1,编译--将源文件转换为汇编代码
2,汇编--将汇编代码转换成目标代码
.o文件包含
一个文件头,包含代码段、数据段和BSS段的大小
一个代码段,包含机器指令
一个数据段,包含初始化全局变量和初始化静态局部变量
一个BSS段,包含未初始化全局变量和未初始化静态局部变量
代码中的指针以及数据和BSS中的偏移量的重定位信息
一个符号表,包含非静态全局变量、函数名称及其属性
3,链接--将目标代码转换成二进制可执行文件

静态与动态链接
动态链接的主要优点是:
可减小每个aout文件的大小
许多执行程序可在内存中共享相同的库函数。修改库函数不需要重新编译源文件。

可执行文件
二进制可执行平面文件 仅包含可执行代码和初始化数据
a.out可执行文件
ELF可执行文件

a.out文件
文件头:包含a.out文件的加载信息和大小
tsize=代码段大小
dsize=包含初始化全局变量和初始化静态局部变量的数据段的大小
bsize=包含未初始化全局变量和未初始化静态局部变量的bss段的大小 totalsize=加载的aout文件的总大小
代码段
数据段
符号表

程序执行过程
读取a.out文件头,以确定所需的总内存大小。
sh从总大小中分配一个内存区给执行映像。
sh放弃放弃旧映像,开始执行新映像。
执行从crt0.o开始,调用main()。
程序终止
正常终止
异常终止

C语言中的函数调用
long jump
C语言程序与汇编代码的链接
gcc生成的汇编代码
入口代码
函数体代码
退出代码

链接库
静态链接库

动态链接库

makefile
make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
一个make文件由一系列目标项、依赖项和规则组成

GDB调试工具
GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。

在emacs IDE中使用GDB

GDB缓冲区
Gud-t:用户命令和GDB消息的GDB缓冲区。
t.c:显示执行进度的程序源代码。
栈帧:显示函数调用序列的栈帧。
本地寄存器:显示当前执行函数中的局部变量。
输入/输出:程序1/O。
断点:显示当前断点设置。

C语言结构体欸和指针

链表处理


二叉树
参考https://blog.csdn.net/chinesekobe/article/details/110874773?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166230209816782427432507%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166230209816782427432507&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-110874773-null-null.142v46pc_rank_34_default_23&utm_term=%E4%BA%8C%E5%8F%89%E6%A0%91&spm=1018.2226.3001.4187
二叉搜索树(BST)是具有以下性质的二叉树:
所有节点键值都不同,即该树不包含具有重复键值的节点节点的左子树只包含键值小于该节点键值的节点。
节点的右子树只包含键值大于该节点键值的节点。
左右子树也是二叉搜索树。

二叉树遍历算法
先序遍历
中序遍历
后序遍历
深度优先遍历
广度优先遍历

标签:文件,第一周,代码,映像,笔记,学习,Unix,Linux,节点
From: https://www.cnblogs.com/yycyhyhf/p/16655037.html

相关文章

  • 学年(2022-2023-1) 学号(20221317)《计算机基础与程序设计》第1周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业链接:https://www.cnblogs.com/zhanquanchen/p/16654783.html作业要求:快速浏览教材(https://www......
  • 20201322陈俊池 学习笔记1
    一、知识点归纳第一章:引言1.3本书目标(1)强化学生的编程背景知识(2)动态数据结构的作用(3)进程概念和进程管理(4)并发编程(5)定时器和定时功能(6)信号、信号处理和进程间通信(7......
  • 笔记day06
    上周内容回顾后续项目中需要用到前端、后端、数据库三方面知识所以课程中涵盖了三方面内容MySQL基本操作基本SQL语句字段类型字段约束外键约束表查询......
  • 《Unix/Linux系统编程》第一、二章学习笔记
    第一章引言让我最有收获的内容:1.8关于UnixUnix是一种通用操作系统。开发者:肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRichie)诞生日期:20世纪70年代早期经典书目......
  • 前端学习之------浏览器兼容(vue)
    1、vue支持所有兼容ES5的浏览器,IE8及以下的浏览器不支持IE5特性,所以IE8及以下的浏览器都不支持vue。2、Babel插件:IE浏览器不支持ES6语法,Babel插件的作用就是把ES6语法转为......
  • python学习Day59
    Day59今日内容概要路由层补充:网页伪静态视图层三板斧中视图函数的返回值问题视图函数返回json格式数据(JsonResponse)form表单携带文件数据FBV与CBV(核心)CBV源......
  • 20201305学习笔记1
    第一章引言总述:在第一章刚开始这本书引入了Linux系统,告诉了我们Linux系统的发展历程和它的一些运行模式,他的版本,其中最主要讲的就是unbuntuLinux版本,讲了他的一些常用......
  • 《Unix/Linux系统编程》学习笔记1
    《Unix/Linux系统编程》学习笔记1第一章引言1、本书目标强化学生的编程背景知识:编程语言->编程开发动态数据结构应用:C结构、指针、链表、链树进程概念和进程管理并......
  • Mybatis学习笔记(三)——Mybatis执行sql的两种方式
    这部分内容前边简单提过了,之前写第一个Mybatis示例时用的就是第一种方式。本节主要介绍MyBatis执行SQL语句的两种方式和它们的区别。MyBatis有两种执行SQL语句的方......
  • Flask 学习-47.Flask-RESTX 设置 Swagger 文档
    前言SwaggerAPI文档是自动生成的,可从您的API的根URL获取。@api.doc()您可以使用装饰器配置文档。SwaggerUI文档默认flask-restx提供SwaggerUI文档,从API的......