操作系统杂项(二)

news2024/11/26 0:51:49

目录

一、简述GDB常见的调试命令,什么是条件断点,多进程下如何调试

1、GDB调试

2、命令格式

3、条件断点

4、多进程下如何调试

二、简述什么是“大端小端”及如何判断

1、小端模式

2、大端模式

3、如何判断

三、简述进程调度算法有哪些

1、分类

2、区别        

四、简述操作系统如何申请及管理内存

五、简述Linux系统态和用户态,何时进入系统态

六、简述LRU算法及其实现方式


一、简述GDB常见的调试命令,什么是条件断点,多进程下如何调试

1、GDB调试

        gdb调试的是可执行文件,在gcc编译时加入 -g,告诉gcc在编译时加入调试信息,这样gdb才能调试这个被编译的文件。 gcc -g test.c -o test

2、命令格式

        ①quit:退出gdb,结束调试。

        ②list:查看程序源代码。

        list 5,10: 显示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:在第7行设置断点。

        break get_sum:以函数名设置断点。

        break 行号或者函数名if条件:以条件表达式设置断点。

        ⑦watch 条件表达式:条件表达式发生改变时程序就会停下来。

        ⑧next:继续执行下一条语句,会把函数当作一条语句执行。

        ⑨step:继续执行下一条语句,会跟踪进入函数,一次一条的执行函数内的代码。

3、条件断点

        break if条件。以条件表达式设置断点。

4、多进程下如何调试

        用set follow-fork-mode child调试子进程或者set follow-fork-mode parent 调试父进程。

二、简述什么是“大端小端”及如何判断

1、小端模式

        低的有效字节存储在低的存储器地址。小端一般为主机字节序,常用的X86结构是小端模式。很多的ARM,DSP都是小端模式。

2、大端模式

        高的有效字节存储在低的存储器地址。大端为网络字节序,KEIL C51为大端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

3、如何判断

        我们可以根据联合体来判断系统是大端还是小端。因为联合体变量总是从低地址存储。

int fun1(){
    union test{
        char c;
        int i;
    }
    test t;
    t.i = 1;
    //如果是大端,则t.c为0x00,则t.c != 1,反之则是小端
    return (t.c == 1);
}

        补充:

        1、进行网络通信时是否需要进行字节序转换?

        相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换

        原因是:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是没有意义的,造成资源的浪费。而不同平台进行通信时必须进行转换,不转换会造成错误的收发数据,字节序转换函数会根据当前平台的存储模式做出相应正确的转换,如果当前平台是大端,则直接返回不进行转换,如果当前平台是小端,会将接收到得网络字节序进行转换。

        2、网络字节序

        网络上传输的数据都是字节流。对于一个多字节数值,在进行网络传输的时候,先传递哪个字节。也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理是一个比较有意义的问题。UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节;而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高字节(即:高位字节存放在低地址)。由此可见,多字节数值在发送之前,在内存中因该是以大端法存放的。所以说,网络字节序是大端字节序,比如,我们经过网络发送整型数值0x12345678时,在X86平台中,它是以小端发存放的,在发送之前需要使用系统提供的字节序转换函数htonl()将其转换成大端法存放的数值。

三、简述进程调度算法有哪些

1、分类

        主要有先来先服务调度算法短作业(进程)优先调度算法高优先级优先调度算法时间片轮转算法多级反馈队列调度算法

        ①先来先服务调度算法:每次调度都是从后备作业(进程)队列中选择一个或多个最先进入该队列的作用(进程),将它们调入内存,为其分配资源、创建进程,然后放入就绪队列。

       ②短作业(进程)优先调度算法:短作业优先(SIF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业(进程),将它们调入内存运行。

        ③高优先级优先调度算法:当把该算法用于作业调度时,系统将从后备队列中选择若干个优先级最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。

        ④时间片轮转算法:每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几十ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便依据该信号停止该进程的执行,并将其送往就绪队列的末尾。然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

        ⑤多级反馈队列调度算法:综合前面多种调度算法。

2、区别        

        区别:抢占式和非抢占式。

        ①抢占式优先权调度算法(Preemptive)

        允许将逻辑上可继续运行的在运行过程暂停的调度方式可防止单一进程长时间独占CPU系统开销大(降低途径:硬件实现进程切换,或扩充主存以贮存大部分程序)。

        ②非抢占式优先权调度算法(Nonpreemptive)

        让进程运行直到结束或阻塞的调度方式容易实现适合专用系统不适合通用系统

四、简述操作系统如何申请及管理内存

        1、物理内存。分为四个层次:寄存器、高速缓存、主存、磁盘。

        寄存器:速度最快、容量最少、价格最贵。

        高速缓存:次之。

        主存:再次之。

        磁盘:速度最慢、容量最多、价格便宜。

        操作系统会对物理内存进行管理,有一个部分称为内存管理器(memory manager),它的主要工作是有效管理内存,记录哪些内存是正在使用的,在进程需要时分配内存以及在进程完成时回收内存。

        2、虚拟内存。操作系统为每一个进程分配一个独立的地址空间,但是虚拟内存。虚拟内存和物理内存存在映射关系,通过页表寻址完成虚拟地址和物理地址的转换

五、简述Linux系统态和用户态,何时进入系统态

        1、系统态(又称内核态)与用户态是操作系统的两种运行级别。内核态拥有最高权限,可以访问所有系统指令;用户态只能访问其中一部分指令。

        2、进入系统态的方式有三种:①系统调用;②异常;③设备中断。其中,系统调用是主动的,其余两种是被动的。

        3、为何区分系统态和用户态:在CPU所有指令中,有一些指令非常危险,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。所以区分系统态和用户态主要是出于安全考虑的。

六、简述LRU算法及其实现方式

        1、LRU算法用于缓存淘汰。思路是将缓存中最近最少使用的对象删除掉

        2、实现方式:利用链表hashmap

        当需要插入新的数据项时,如果新数据项在链表中存在(一般称为命中),则把该节点移到链表头部,如果不存在,则新建一个节点,放到链表头部,若缓存满了,则把链表最后一个节点删除即可。

        在访问数据的时候,如果数据项在链表中存在,则把该节点移到链表头部,否则返回-1。这样一来,在链表尾部的节点就是最近最久未访问的数据项。

        3、C++实现代码:

class LRUCache{
    list<pair<int, int>> cache;   //创建双向链表
    unordered_map<int, list<pair<int, 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.earse(temp.first);
            cache.pop_back();
        }
        cache.push_front(pair<int, 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);
 obj->put(key,value);
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iSCSI 网络存储服务部署

一、介绍 iSCSI &#xff08;Internet Small Computer System Interface&#xff09;&#xff0c;互联网小型计算机系统接口&#xff1b;iSCSI 是SCSI接口 与以太网技术相结合的新型存储技术&#xff0c;属于ip san的一种&#xff0c;可以用来在网络中传输 SCSI 接口的命令和数…

用户进入网站之后看一眼就跳走,你知道原因吗?

用户进入网站后立即离开的原因可能有很多&#xff0c;以下是一些可能的原因和相应的规避办法&#xff1a; 页面加载速度慢&#xff1a; 如果网站加载速度过慢&#xff0c;用户可能会感到不耐烦并离开。可以通过优化网站的代码和资源&#xff0c;使用浏览器缓存、CDN加速等技术…

Docker缩小镜像体积与搭建LNMP架构

镜像加速地址 {"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live"] } daemon.json 配置文件里面 bip 配置项中可以配置docker 的网段 {"graph": "/data/docker", #数据目录&#xff0…

QTreeWidget

一、基本要点 1、QTreeWidgetItem 是 Qt 开发框架中的一个重要组件&#xff0c;它主要用于表示树形视图中的节点。在 QTreeWidget 这样的控件中&#xff0c;每个节点都是 QTreeWidgetItem 的实例&#xff0c;可以包含文本、图标以及其他数据。 2、connect 是Qt中的一个重要函…

Crackmapexec一键检测网络环境(KALI工具系列四十四)

目录 1、KALI LINUX 简介 2、Crackmapexec工具介绍 3、信息收集 3.1 目标IP 3.2 kali的IP 4、操作步骤 4.1 帮助命令 4.2 扫描网段 4.3 验证访问 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 &#xff0c;广泛用于网络安全社区。它…

蓝卓油气行业解决方案

我国是全球最大的能源消费国&#xff0c;保障国家能源安全是我国能源发展的首要任务&#xff0c;油气作为我国能源体系的重要组成部分&#xff0c;是支撑我国工业和经济社会发展的基础和“压舱石&#xff0c;也是必须筑牢的能源安全底线。 蓝卓根据油气田行业发展趋势&#xf…

Linux中六种常见工具

一、软件包管理器yum 1、yum概念 yum是一个软件下载安装管理的客户端&#xff0c;例如手机上的小米一应用商城。 那为什么我们推荐在Linux中用yum下载软件呢&#xff1f; 其实软件的安装有三种方式&#xff1a;源代码安装&#xff0c;rpm包安装&#xff0c;yum安装。 a、源…

STM32 HRTIM生成PWM时遇到无法输出PWM脉冲波形问题

在使用HRTIM生成PWM时&#xff0c;当把周期寄存器更新的设置放到while循环中时&#xff0c;无法输出PWM脉冲波形&#xff0c;即使增加计数延时也无法输出&#xff0c;最终只能放到中断函数中执行后期寄存器值更新才能够生成PWM脉冲波形。

【XSS】

文章目录 0x01 简介0x02 XSS Payload用法XSS攻击平台及调试JavaScript 0x03 XSS构造技巧XSS漏洞防御策略 跨站脚本攻击&#xff0c;Cross Site Script。&#xff08;重点在于脚本script&#xff09; 分类 反射型、存储型DOM型 漏洞原理&#xff1a;通过插入script篡改“HTML”…

单片机设计_自行车码表(AT89C51, LCD1602, DS1302,霍尔传感器)

想要更多项目私wo!!! 一、电路设计 系统采用51单片机LCD1602液晶DS1302时钟模块霍尔传感器电机按键模块蜂鸣器报警模块设计而成。 产品自带单片机上电复位电路、手动复位电路&#xff08;复位按键&#xff09;、晶振电路&#xff08;给单片机提供时钟周期&#xff09;。 …

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…

网络编程+文件上传操作的理解

前言&#xff1a; 概述:在网络通信协议下,不同计算机上运行的程序,进行数据传输 比如:通信,视频通话,网游,邮件等 只要是计算机之间通过网络进行数据传输,就有网络编程的存在 &#xff08;下面单纯是在Java基础中了解了一下网络编程&#xff0c;感觉理…

深度学习 | CNN 基本原理

目录 1 什么是 CNN2 输入层3 卷积层3.1 卷积操作3.2 Padding 零填充3.3 处理彩色图像 4 池化层4.1 池化操作4.2 池化的平移不变性 5 全连接层6 输出层 前言 这篇博客不够详细&#xff0c;因为没有介绍卷积操作的具体计算&#xff1b;但是它介绍了 CNN 各层次的功能…

08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三&#xff1a;君于终日乾乾&#xff1b;夕惕若&#xff0c;厉无咎”。九三是指阳爻在卦中处于第三位&#xff0c;已经到达中位&#xff0c;惕龙指这个阶段逐渐理性&#xff0c;德才已经显现&#xff0c;会引人注目&#xff1b;但要反思自己的不足&#xff0c;努力不…

昇思25天学习打卡营|MQ(mindquantum)编程实践

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 安装 Packages # 安装 mindquantum, networkx !pip install mindquantum -i https://pypi.mirrors.ustc.edu.cn/simple !pip install networkx -i https://pypi.mirrors.ustc.edu.cn/simple 安装…

脸书登录指南:如何在同一台设备登录多个Facebook账号?

海外社媒营销人员和跨境卖家现在越来越依赖社交媒体平台来拓展业务和接触潜在客户&#xff0c;尤其是Facebook。然而&#xff0c;在进行脸书登录时&#xff0c;你可能会问&#xff1a;如何在同一台设备上登录多个Facebook账号&#xff0c;而不违反Facebook的使用条款&#xff1…

指针与数组笔试题解析

文章目录 1.一维数组1.1 整型数组1.2 字符数组 2. 二维数组3.指针笔试题3.1 练习13.2 练习23.3 练习3 数组名的意义&#xff1a; 1.sizeof(数组名)&#xff0c;这里的数组表示整个数组&#xff0c;计算的整个数组的大小 2.&数组名&#xff0c;这里的数组名表示整个数组的&a…

【Diffusion学习】【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路

文章目录 图片生成Framework 需要3个组件&#xff1a;相关论文【Stable Diffusion&#xff0c;DALL-E&#xff0c;Imagen】 具体介绍三个组件1. Text encoder介绍【结论&#xff1a;文字的encoder重要&#xff0c;Diffusion的模型不是很重要&#xff01;】评估指标&#xff1a;…

用go实现限流算法

文章目录 固定窗口优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 滑动窗口优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 漏桶限流器优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 令牌桶优缺点&#xff1a;适用场景&#xff1a;总结&#xf…

定义损失函数并以此训练和评估模型

基础神经网络模型搭建 【Pytorch】数据集的加载和处理&#xff08;一&#xff09; 【Pytorch】数据集的加载和处理&#xff08;二&#xff09; 损失函数计算模型输出和目标之间的距离。通过torch.nn 包可以定义一个负对数似然损失函数&#xff0c;负对数似然损失对于训练具有多…