每日十题八股-2025年1月16日

1.讲一下银行家算法
2.乐观锁和悲观锁有什么区别?
3.介绍一下操作系统内存管理
4.什么是虚拟内存和物理内存?
5.讲一下页表?
6.讲一下段表?
7.虚拟地址是怎么转化到物理地址的?
8.程序的内存布局是怎么样的?
9.堆和栈的区别?
10.fork()会复制哪些东西?

1.讲一下银行家算法

首先确定是避免死锁的算法,得名于银行向客户放贷时确保有足够资金来满足所有需求的类比。
算法核心:在每次资源请求时,检查分配后系统是否处于安全状态 ,只有在不会导致死锁的情况下,才会分配资源。记忆的最好方法还是想起来当初上操作系统课上的题目:参考 一定要看,一定要看参考的例题才能记住。

在这里插入图片描述

2.乐观锁和悲观锁有什么区别?

记住主体是事务和冲突。

悲观锁很直白,就是很悲观地认为事务一定会冲突,对资源的操作一定会导致不一致所以,一进来就加锁,操作完成才解锁。
乐观锁是乐观地认为多个事务之间很少发生冲突,所以允许所有事务同时操作,但是操作完之后会检查版本号或者时间戳,发生了不一致就回滚。

乐观锁适合读多写少,悲观锁适合写多。

3.介绍一下操作系统内存管理?

说句废话,内存管理就是管理内存,主要的作用有为进程分配与释放内存,虚拟地址和物理地址的转换,内存扩充,内存映射(把文件映射到进程空间中),内存优化,内存安全。
其中一个主要的特点就是虚拟内存的设计,操作系统为每一个进程构建一个虚拟空间,使得进程能够使用自己的虚拟内存指针方便操作,且隔离各个进程。

4.什么是虚拟内存和物理内存?

物理内存通常就是指RAM,随机存取存储器。对于用户使用来说,目前计算机装配的物理内存是不足以满足全部的进程使用的,
虚拟内存的本质是通过空间置换等操作让系统能够处理超出物理内存容量的任务。但是需要明白的是虚拟内存的实现本身也需要内存来存储信息,以及这样比直接从物理内存进行存取更慢。

虚拟内存通过将程序的地址空间划分成若干个固定大小的页或段,并将这些页或者段映射到物理内存中的不同位置,从而使得程序在运行时可以更高效地利用物理内存。

5.讲一下页表?

这一块怎么有点像计算机组成原理,好多对应关系,记得我头疼。就记一句话管理虚拟内存和物理内存之间的映射关系。
页表(Page Table)是计算机操作系统中的一种数据结构,用来管理虚拟内存和物理内存之间的映射关系。页表是实现分页存储管理的重要部分。
分页的概念
在分页系统中,虚拟内存被划分为固定大小的块,称为页(Page)。
物理内存(RAM)同样被划分为大小相等的块,称为页框(Page Frame)。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.讲一下段表?

分页和分段是两种不同的内存管理机制,它们解决的问题和实现方式各有不同,但可以独立使用或结合使用。

将程序按内容或过程函数关系分成段,例如程序段、数据段…以段为单位分配内存,通过地址映射机制,将段式虚拟地址转换成实际内存物理地址。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。
在这里插入图片描述
在这里插入图片描述
更近一部分的还有段页式,多级页表等等
在这里插入图片描述

7.虚拟地址是怎么转化到物理地址的?

在现代操作系统中,通常用页表完成虚拟地址和物理地址的映射。并且通过内存管理单元(Memory Management Unit,MMU)来完成,MMU是计算机系统中的硬件组件,负责虚拟地址和物理地址之间的转换。
在这里插入图片描述

8.程序的内存布局是怎么样的?

在这里插入图片描述

9.堆和栈的区别?

在这里插入图片描述

10.fork()会复制哪些东西?

小林coding的答案:
fork 阶段会复制父进程的页表(虚拟内存);
fork 之后,如果发生了写时复制,就会复制物理内存。

fork() 是一种用于 创建新进程 的系统调用,是 Unix 和类 Unix 操作系统(如 Linux)中进程创建的基础。fork() 调用时,会创建一个子进程,并复制父进程的资源,使子进程成为父进程的几乎完全拷贝。

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();  // 创建子进程
    if (pid < 0) {
        printf("Fork failed\n");
    } else if (pid == 0) {
        printf("This is the child process.\n");
    } else {
        printf("This is the parent process. Child PID: %d\n", pid);
    }
    return 0;
}
This is the parent process. Child PID: 1234
This is the child process.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值