网站建设对百度推广的影响,上海线上引流推广,自如网站做的好 服务,网站设计深圳要联系方式吗?文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改#xff1f;3、说说常用的Linux命令#xff1f;4、说说如何以root权限运行某个程序#xff1f;5、 说说软链接和硬链接的区别#xff1f;6、说说静态库和动态… 文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改3、说说常用的Linux命令4、说说如何以root权限运行某个程序5、 说说软链接和硬链接的区别6、说说静态库和动态库怎么制作及如何使用区别是什么7、简述GDB常见的调试命令什么是条件断点多进程下如何调试。8、说说什么是大端小端如何判断大端小端9、说说进程调度算法有哪些10、简述操作系统如何申请以及管理内存的11、简述Linux系统态与用户态什么时候会进入系统态12、简述LRU算法及其实现方式13、 一个线程占多大内存14、什么是页表为什么要有15、简述操作系统中的缺页中断。 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。
查看进程运行状态的指令ps命令。“ps -aux | grep PID”用来查看某PID进程状态查看内存使用情况的指令free命令。“free -m”命令查看内存使用情况。tar解压文件的参数
五个命令中必选一个
-c: 建立压缩档案
-x解压
-t查看内容
-r向压缩归档文件末尾追加文件
-u更新原压缩包中的文件
这几个参数是可选的
-z有gzip属性的
-j有bz2属性的
-Z有compress属性的
-v显示所有过程
-O将文件解开到标准输出2、文件权限怎么修改
Linux文件的基本权限就有九个分别是owner/group/others三种身份各有自己read/write/execute
权限 修改权限指令chmod 举例文件的权限字符为 -rwxrwxrwx 时这九个权限是三个三个一组。其中我们可以使用数字来代表各个权限。各权限的分数对照如下 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的 例如当权限为 [-rwxrwx—] 则分数是 owner rwx 421 7 group rwx 421 7 others — 000 0 所以我们设定权限的变更时该文件的权限数字就是770变更权限的指令chmod的语法是这样的
[rootwww ~]# chmod [-R] xyz 文件或目录
选项与参数
xyz : 就是刚刚提到的数字类型的权限属性为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更亦即连同次目录下的所有文件都会变更
# chmod 770 douya.c //即修改douya.c文件的权限为7703、说说常用的Linux命令
cd命令用于切换当前目录ls命令查看当前文件与目录grep命令该命令常用于分析一行的信息若当中有我们所需要的信息就将该行显示出来该命令通常与管道命令一起使用用于对一些命令的输出进行筛选加工。cp命令复制命令mv命令移动文件或文件夹命令rm命令删除文件或文件夹命令ps命令查看进程情况kill命令向进程发送终止信号tar命令对文件进行打包调用gzip或bzip对文件进行压缩或解压cat命令查看文件内容与less、more功能相似top命令可以查看操作系统的信息如进程、CPU占用率、内存信息等pwd命令命令用于显示工作目录。
4、说说如何以root权限运行某个程序
sudo chown root app文件名 sudo chmod us app文件名
5、 说说软链接和硬链接的区别
定义不同 软链接又叫符号链接这个文件包含了另一个文件的路径名。可以是任意文件或目录可以链接不同文件系统的文件。 硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接这些文件名可以在同一目录或不同目录。限制不同 硬链接只能对已存在的文件进行创建不能交叉文件系统进行硬链接的创建软链接可对不存在的文件或目录创建软链接可交叉文件系统创建方式不同 硬链接不能对目录进行创建只可对文件创建软链接可对文件或目录创建影响不同 删除一个硬链接文件并不影响其他有相同 inode 号的文件。删除软链接并不影响被指向的文件但若被指向的原文件被删除则相关软连接被称为死链接即dangling link若被指向路径文件被重新创建死链接可恢复为正常的软链接。
6、说说静态库和动态库怎么制作及如何使用区别是什么
静态库代码装载的速度快执行速度略比动态库快。动态库更加节省内存可执行文件体积比静态库小很多。静态库是在编译时加载动态库是在运行时加载。生成的静态链接库Windows下以.lib为后缀Linux下以.a为后缀。生成的动态链接库Windows 下以.dll为后缀Linux下以.so为后缀。
7、简述GDB常见的调试命令什么是条件断点多进程下如何调试。
GDB调试gdb调试的是可执行文件在gcc编译时加入 -g 告诉gcc在编译时加入调试信息这样gdb才能调试这个被编译的文件
gcc -g tesst.c -o testquit退出gdb结束调试list查看程序源代码 list 510显示5到10行的代码 list test.c:5, 10: 显示源文件5到10行的代码在调试多个文件时使用 list get_sum: 显示get_sum函数周围的代码 list test,c get_sum: 显示源文件get_sum函数周围的代码在调试多个文件时使用reverse-search字符串用来从当前行向前查找第一个匹配的字符串run程序开始执行help list/all查看帮助信息break设置断点 break 7在第七行设置断点 break get_sum以函数名设置断点 break 行号或者函数名 if 条件以条件表达式设置断点watch 条件表达式条件表达式发生改变时程序就会停下来next继续执行下一条语句 会把函数当作一条语句执行step继续执行下一条语句会跟踪进入函数一次一条的执行函数内的代码
条件断点break if 条件 以条件表达式设置断点 多进程下如何调试
用set follow-fork-mode child 调试子进程
或者set follow-fork-mode parent 调试父进程8、说说什么是大端小端如何判断大端小端
小端模式低的有效字节存储在低的存储器地址。小端一般为主机字节序常用的X86结构是小端模式。很多的ARMDSP都为小端模式。大端模式高的有效字节存储在低的存储器地址。大端为网络字节序KEIL C51则为大端模式。
有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。 如何判断我们可以根据联合体来判断系统是大端还是小端。 因为联合体变量总是从低地址存储。
int fun1(){
union test{char c;int i;
};test t; t.i 1;
//如果是大端则t.c为0x00则t.c ! 1反之是小端return (t.c 1);
}在进行网络通信时是否需要进行字节序转换 相同字节序的平台在进行网络通信时可以不进行字节序转换但是跨平台进行网络数据通信时必须进行字节序转换。 原因如下网络协议规定接收到得第一个字节是高字节存放到低地址所以发送时会首先去低地址取数据的高字节。小端模式的多字节数据在存放时低地址存放的是低字节而被发送方网络协议函数发送时会首先去低地址取数据想要取高字节真正取得是低字节接收方网络协议函数接收时会将接收到的第一个字节存放到低地址想要接收高字节真正接收的是低字节所以最后双方都正确的收发了数据。而相同平台进行通信时如果双方都进行转换最后虽然能够正确收发数据但是所做的转换是没有意义的造成资源的浪费。而不同平台进行通信时必须进行转换不转换会造成错误的收发数据字节序转换函数会根据当前平台的存储模式做出相应正确的转换如果当前平台是大端则直接返回不进行转换如果当前平台是小端会将接收到得网络字节序进行转换。网络字节序 网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理,是一个比较有意义的问题; UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高位字节(即:高位字节存放在低地址处);由此可见,多字节数值在发送之前,在内存中因该是以大端法存放的; 所以说,网络字节序是大端字节序; 比如,我们经过网络发送整型数值0x12345678时,在80X86平台中,它是以小端发存放的,在发送之前需要使用系统提供的字节序转换函数htonl()将其转换成大端法存放的数值;
9、说说进程调度算法有哪些
先来先服务调度算法短作业(进程)优先调度算法高优先级优先调度算法时间片轮转法多级反馈队列调度算法
先来先服务调度算法每次调度都是从后备作业进程队列中选择一个或多个最先进入该队列的作业进程将它们调入内存为它们分配资源、创建进程然后放入就绪队列。短作业(进程)优先调度算法短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业进程将它们调入内存运行。高优先级优先调度算法当把该算法用于作业调度时系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时该算法是把处理机分配给就绪队列中优先权最高的进程时间片轮转法每次调度时把CPU 分配给队首进程并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时由一个计时器发出时钟中断请求调度程序便据此信号来停止该进程的执行并将它送往就绪队列的末尾然后再把处理机分配给就绪队列中新的队首进程同时也让它执行一个时间片。多级反馈队列调度算法综合前面多种调度算法。
非抢占式优先权算法 在这种方式下系统一旦把处理机分配给就绪队列中优先权最高的进程后该进程便一直执行下 去直至完成或因发生某事件使该进程放弃处理机时系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中也可用于某些对实时性要求不严的实时系统中。抢占式优先权调度算法 在这种方式下系统同样是把处理机分配给优先权最高的进程使之执行。但在其执行期间只要又出现了另一个其优先权更高的进程进程调度程序就立即停止当前进程(原优先权最高的进程)的执行重新将处理机分配给新到的优先权最高的进程。因此在采用这种调度算法时是每当系统中出现一个新的就绪进程i 时就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果 Pi≤Pj原进程Pj便继续执行但如果是PiPj则立即停止Pj的执行做进程切换使i 进程投入执行。显然这种抢占式的优先权调度算法能更好地满足紧迫作业的要求故而常用于要求比较严格的实时系统中以及对性能要求较高的批处理和分时系统中。 区别
非抢占式Nonpreemptive让进程运行直到结束或阻塞的调度方式容易实现适合专用系统不适合通用系统。抢占式Preemptive允许将逻辑上可继续运行的在运行过程暂停的调度方式可防止单一进程长时间独占CPU系统开销大降低途径硬件实现进程切换或扩充主存以贮存大部分程序。
10、简述操作系统如何申请以及管理内存的
操作系统如何管理内存
物理内存物理内存有四个层次分别是寄存器、高速缓存、主存、磁盘。 寄存器速度最快、量少、价格贵。 高速缓存次之。 主存再次之。 磁盘速度最慢、量多、价格便宜。 操作系统会对物理内存进行管理有一个部分称为内存管理器(memory manager)它的主要工 作是有效的管理内存记录哪些内存是正在使用的在进程需要时分配内存以及在进程完成时回收内存。虚拟内存操作系统为每一个进程分配一个独立的地址空间但是虚拟内存。虚拟内存与物理内存存在映射关系通过页表寻址完成虚拟地址和物理地址的转换。
操作系统如何申请内存 从操作系统角度来看进程分配内存有两种方式分别由两个系统调用完成*brk和mmap。
11、简述Linux系统态与用户态什么时候会进入系统态
内核态与用户态内核态系统态与用户态是操作系统的两种运行级别。内核态拥有最高权限可以访问所有系统指令用户态则只能访问一部分指令。什么时候进入内核态共有三种方式a、系统调用。b、异常。c、设备中断。其中系统调用是主动的另外两种是被动的。为什么区分内核态与用户态在CPU的所有指令中有一些指令是非常危险的如果错用将导致整个系统崩溃。比如清内存、设置时钟等。所以区分内核态与用户态主要是出于安全的考虑。
12、简述LRU算法及其实现方式
LRU算法LRU算法用于缓存淘汰。思路是将缓存中最近最少使用的对象删除掉实现方式利用链表和hashmap。 当需要插入新的数据项的时候如果新数据项在链表中存在一般称为命中则把该节点移到链表头部如果不存在则新建一个节点放到链表头部若缓存满了则把链表最后一个节点删除即可。 在访问数据的时候如果数据项在链表中存在则把该节点移到链表头部否则返回-1。这样一来在链表尾部的节点就是最近最久未访问的数据项。
class LRUCache {
listpairint, int cache;//创建双向链表
unordered_mapint, listpairint, int::iterator map;//创建哈希表
int cap;
public:
LRUCache(int capacity) {
cap capacity;
}
int get(int key) {
if (map.count(key) 0){
auto temp *map[key];
cache.erase(map[key]);
map.erase(key);
cache.push_front(temp);
map[key] cache.begin();//映射头部
return temp.second;
}
return -1;
}
void put(int key, int value) {
if (map.count(key) 0){
cache.erase(map[key]);
map.erase(key);
}
else if (cap cache.size()){
auto temp cache.back();
map.erase(temp.first);
cache.pop_back();
}
cache.push_front(pairint, int(key, value));
map[key] cache.begin();//映射头部
}
};
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache* obj new LRUCache(capacity);
* int param_1 obj-get(key);
* obj13、 一个线程占多大内存
一个linux的线程大概占8M内存。 linux的栈是通过缺页来分配内存的不是所有栈地址空间都分配了内存。因此8M是最大消耗实际的内存消耗只会略大于实际需要的内存(内部损耗每个在4k以内)。
14、什么是页表为什么要有
页表是虚拟内存的概念。操作系统虚拟内存到物理内存的映射表就被称为页表。 原因不可能每一个虚拟内存的 Byte 都对应到物理内存的地址。这张表将大得真正的物理地址也放不下于是操作系统引入了页Page的概念。进行分页这样可以减小虚拟内存页对应物理内存页的映射表大小。 如果将每一个虚拟内存的 Byte 都对应到物理内存的地址每个条目最少需要 8字节32位虚拟地址-32位物理地址在 4G 内存的情况下就需要 32GB 的空间来存放对照表那么这张表就大得真正的物理地址也放不下了于是操作系统引入了页Page的概念。 在系统启动时操作系统将整个物理内存以 4K 为单位划分为各个页。之后进行内存分配时都以页为单位那么虚拟内存页对应物理内存页的映射表就大大减小了4G 内存只需要 8M 的映射表即可一些进程没有使用到的虚拟内存也并不需要保存映射关系而且Linux 还为大内存设计了多级页表可以进一页减少了内存消耗。
15、简述操作系统中的缺页中断。
缺页异常malloc和mmap函数在分配内存时只是建立了进程虚拟地址空间并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时处理器自动触发一个缺页异常引发缺页中断。缺页中断缺页异常后将产生一个缺页中断此时操作系统会根据页表中的外存地址在外存中找到所缺的一页将其调入内存。