特别声明
- 制作:张老板
- 部分内容借鉴于CSDN博主「回阿女」的原创文章,原文链接:https://blog.csdn.net/weixin_43634327/article/details/103455692
简答和编程
写出20条命令
ls mv cp mkdir touch cd pwd chmod kill help rm cat echo bash more less find tar gcc su
写出shell脚本的执行方法
- source demo.sh
- bash demo.sh
- ./demo.sh
说明Linux程序的执行时间包括哪些部分
- 用户态
- 内核态
- 睡眠
shell脚本
- 写一个脚本计算整数1至1000的和
#!/bin/bash
sum=0
for i in {1..1000}
do
sum=$[$i+$sum]
done
echo $sum
- 写一个脚本计算整数1至1000的乘积
#!/bin/bash
var=1
for i in {1..1000}
do
var=$[$var*$i]
done
echo $var
linux自带的库函数有哪些类型
- 输入输出
- 数学运算
- 字符串处理
- 时间日期
- 内存分配
- 多线程并发
- 等
列出linux操作系统中文件的类型
- 常规文件
- 目录文件
- 字符设备文件
- 块设备文件
- 管道文件
- 符号链接文件
- 套接字文件
写出linux系统向进程发送信号的几种机制
- 用/bin/kill发送信号
- 从键盘发送信号
- 用kill和raise函数发送信号
- 用alarm函数发送信号
简述应用程序编程接口
列出与文件I/O操作相关的应用编程接口
- open (文件打开函数)
要求内核打开相应的文件、宣告想要访问I/O设备或文件
- lseek(改变文件位置函数)
可以改变当前文件的读写位置
- read/write(文件读写函数)
向文件读或写数据
- close(文件关闭函数)
通知内核关闭文件
列出进程间通信的应用编程接口
- mkfifo
创建管道的命令
- pipe
创建管道
- msgget
创建和访问消息队列
- msgsnd
把消息添加到消息队列中
- msgrcv
从消息队列中获取信息
- msgctl
消息队列控制函数
- shmget
创建共享内存
- shmat
访问共享内存
- shmdt
将共享内存从当前进程中分离
- shmctl
共享内存控制函数
- semget
创建信号量
- semop
增加或价绍信号量
- semctl
信号量控制函数
论述
- 论述linux内核用哪三个相关的数据结构来表示打开的文件
v-node表、文件表、描述符表。v-node表:linux将打开文件的属性信息保存在v-node中,所有v-node构成v-node表。文件表:linux将打开文件信息存储在文件对象中,所有文件对象构成文件表。描述符表:存储文件描述符,用于定位文件的位置。
- 论述在linux多线程程序中有哪些变量类型、被映射到哪段地址空间、有几个运行实例
全局变量、本地自动变量、本地静态变量。全局变量:被映射到进程虚拟存储器的可读写数据区域,仅有一个运行实例。本地自动变量:函数未调用时不分配内存,调用时被映射到线程堆栈中,可以拥有一个至多个运行实例。本地静态变量:被映射到虚拟存储器的可读写区域,仅有一个运行实例。
画图描述及分析
-
画图说明linux进程虚拟地址空间结构
20191212173504327.png
-
画出linux进程、linux内核与系统调用间关系图
20191212113805900.png
-
画图说明当一个新的程序开始时用户栈的典型组织结构
2019121216474793.png
分析进程家族关系
- 说明使用fork系统调用创建进程的过程
- 系统创建子进程PCB,内容复制于父进程PCB,新分配PID
- 创建父进程数据集的一个副本,保存于新分配的存储器中,作为子进程数据集
- 假设下面程序运行时子进程的pid是3000,父进程的pid是2999.请写程序运行结果,并画图说明父子进程运行时用户地址空间变化情况
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
int glob=10;
int main(void){
int local;
pid_t pid;
local=8;
if((pid=fork())==0){
sleep(4);
}
else{
glob++;
local--;
sleep(10);
}
printf("pid=%d,glob=%d,local=%d\n",getpid(),glob,local);
exit(0);
}
- 结果
pid=3000,glob=10,local=8 //子进程
pid=2999,glob=11,local=7 //父进程- 说明图
进程.png
网友评论