按字节编址与按字编址的电路原理图图解

按字节编址与按字编址的电路原理图图解

  计算机或者嵌入式刚刚入门的人,可能会有这样的疑问:CPU 是 32 位/64 位的计算机,是怎么读取一个字节的?又或者说,是怎么一下子读取到 32 位/64 位数据的?这其实就是计算机的编址的问题。只要知道了,按字节编址与按字长编址的区别就可以解决这些疑问了。下面将用按字节编址与按字编址的电路原理图图解来讲述其中的奥秘。   首先,3……

深入理解操作系统之——段页式存储器管理

深入理解操作系统之——段页式存储器管理

  段式虚拟存储器中的段是按程序的逻辑结构划分的。本文将来介绍一下什么是段式存储器管理,段式与页式存储器管理的区别又在哪,还有段页式存储器管理的工作原理。如果对页式存储管理方式不清楚的建议先弄懂页式存储管理方式(参考:深入理解操作系统之——分页式存储管理) 段式存储器管理 段的划分是具有逻辑意义的,例如:主程序段、数据段、堆栈段、子程序段等; 每……

(4)DIY Shell——管道与重定向

(4)DIY Shell——管道与重定向

  对shell有一定了解的人都知道,管道和重定向是 Linux 中非常实用的 IPC 机制。在shell中,我们通常使用符合‘|’来表示管道,符号‘>’和‘<’表示重定向。那么管道和重定向的真实含义(定义)又是什么呢? 管道 管道的定义 管道就是一个进程与另一个进程之间通信的通道,它通常是用作把一个进程的输出通过管道连接到另一个进程的……

图解:生产者与消费者伪源码模型

图解:生产者与消费者伪源码模型

 西邮 Linux 兴趣小组   生产者与消费者问题 问题描述: 生产者消费者问题,也称有限缓冲问题,是一个多线程同步问题的经典案例。一起来看看它的实现吧! 问题分析 要解……

(3)DIY Shell之——创建子进程执行外部命令

(3)DIY Shell之——创建子进程执行外部命令

  前面文章已经说到了,shell在执行外部命令的时候,shell的进程本身会被外部命令的可执行程序所取代,从而导致调用外部命令之后的程序都无法被执行。那么我们可以通过创建一个子进程,在子进程执行外部命令的方法来解决这个问题。原来的父进程就继续执行shell的其他的代码,比如等待命令执行完成、等待用户输入其他命令。具体的实现思路如下。 父进程与子进……

【转载】形象地描述进程、线程和协程之间的区别

【转载】形象地描述进程、线程和协程之间的区别

原创:刘欣          转载自码农翻身公众号。   很久以前,有两个程序,暂且称他们旺财和小强吧。 旺财和小强这两个程序都很长,每个都有十几万行。 他们两个的人生价值就是到 CPU 上去运行,把运行结果告诉人类。 CPU 是稀缺资源,只有一个,他们俩必须排着队,轮流使用。 旺财从头到尾执行完了……

深入理解操作系统之——分页式存储管理

深入理解操作系统之——分页式存储管理

  页式存储器管理是操作系统中十分重要的内容,这也正是虚拟存储关键技术之一。如果没有理解页式管理、段式管理和段页式管理,那么对操作系统中的虚拟内存理解也只有十之一二,因为操作系统中的各个概念都是密不可分的,你中有我,我中有你。本文将讲述内容包括一级页表、快表、二级页表和多级页表。   页 相对物理块来说,页是逻辑地址空间(虚拟内存空间)的……

(2)DIY Shell之——内建命令与外部命令

(2)DIY Shell之——内建命令与外部命令

  这是本博客的第一个文章专辑。主要介绍如何用 C 语言基于Linux系统来实现一个简单shell,DIY 一个shell。通过自己编程实现一个Linux下的shell,可以使得个人对进程的概念、进程的通信和操作系统的运行的理解更加的深刻。还会大大增加个人学习的成就感,提供学习兴趣。 这一个文章专辑被命名为 StupidShell ,这也是作者所实……

(1)DIY Shell之——shell的基本框架

(1)DIY Shell之——shell的基本框架

  这是本博客的第一个文章专辑。主要介绍如何用 C 语言基于Linux系统来实现一个简单shell,DIY 一个shell。通过自己编程实现一个Linux下的shell,可以使得个人对进程的概念、进程的通信和操作系统的运行的理解更加的深刻。还会大大增加个人学习的成就感,提供学习兴趣。 这一个文章专辑被命名为StupidShell,这也是作者所实现的……

深入探讨操作系统的内存管理——虚拟内存与物理内存

深入探讨操作系统的内存管理——虚拟内存与物理内存

本文将从单个进程能申请到的最大虚拟内存空间开始深入探讨Linux操作系统虚拟内存和物理内存的关系。 环境: 虚拟机:VMware12、2G 内存、2G 交换区。 操作系统:Linux Ubuntu16 x64 编译器:gcc CPU:Intel core i5 x64   为了高效、准确测试出该系统下,单个进程能够申请到的最大虚存空间,所以编写了一……

Linux共享内存之段错误

Linux共享内存之段错误

最近为了学习操作系统,练习写一个Linux 下的 shell,然后其中采用了Linux 的共享内存的方案。 然而在共享内存初始化的时候移植了之前写共享内存实验已经成功的初始化代码,却出现了段错误。主要代码如下: #include "stupidShell.h" int *loop; int sh……