Linux的操作系统原理详解

Linux的操作系统原理详解

a5d788eb0505754e906f08ac95e1fdb8.png///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿///

a7bef74afbb02893fd25d4173b500c6f.png

c43efb333f39a82fb892dd0c644168b9.png

1.操作系统基本概念

操作系统是一个基本程序的集合,在这个集合中,最重要的程序称为内核(Kernel)。当操作系统启动时,内核被装载到 RAM中。内核为操作系统提供了主要功能,一般把“内核”作为“操作系统”的同义词。

操作系统有两个目标:

.与硬件交互:为硬件平台上的低层可编程部件提供服务

.为用户程序提供执行环境

当用户程序想要使用硬件资源时,需要向操作系统发送请求;内核对这个请求进行评估,如果允许使用该硬件资源,则由内核代表与相关硬件进行交互。为了实现这种机制,操作系统依靠特殊的硬件机制来禁止用户程序直接与硬件交互;CPU至少引入了两种执行模式:用户程序的非特权模式 &内核的特权模式;在 Unix中分别称为用户态(User Model)& 内核态(Kernel Model)。

1.1多用户系统

多用户系统(Multiuser System)是指能够并发且独立地执行分别属于多个用户的应用程序的系统。

并发是多个应用程序能同时处于活动状态并且竞争各种资源,如 CPU,内存,硬盘等。独立是指每个应用程序能够执行自己的任务而不需要考虑其他应用程序的行为。

多用户系统需要具备以下特点:

·用户身份认证机制

·应用程序运行的保护机制:防止不同用户程序之间的干扰

·分配给每个用户的资源的记账机制

上述安全机制的实现与 CPU特权模式相关;Unix是多用户系统

1.2用户与组

在多用户系统中,每个用户在机器上都有私用空间,比如磁盘空间。

操作系统需要保证用户空间的私有部分仅仅对其拥有者是可见的

每个用户在操作系统中都有一个唯一标识,叫做用户标识符(User ID);同时,为了与其他用户有选择地共享资料,每个用户可以是一个或者多个用户组的成员,组由用户组标识符唯一标识(User Group ID)。

每个文件也与一个用户组对应:比如同组用户可以读,其他用户不可读

Unix系统中存在一个 root用户,操作系统不对其进行进行任何限制,root能够访问系统中的任何一个文件,干涉任意一个用户程序。

1.3进程

进程(Process)是操作系统对正在运行程序的一个抽象。一个进程可以看作“程序执行的一个实例”或者“一个运行程序的执行上下文”。

每个进程都有一个地址空间(Address Space):允许进程引用的内存地址集合。

在多用户系统中,多个进程能够并发执行,并且能够竞争系统资源;这种允许进程并发活动的系统被称为多道程序系统或者多处理系统。

进程与程序之间的关系:几个进程能够并发地执行同一个程序,而一个进程能够顺序执行多个程序

在单处理器系统上,在某一个时刻只能有一个进程占

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux共享内存是一种高效的进程间通信方式,它可以使多个进程共享同一块内存区域,从而避免了进程间的数据拷贝和通信的开销。下面是Linux共享内存的原理详解: 1.创建共享内存: 在Linux系统中,使用shmget()函数创建共享内存,该函数的原型如下: ``` int shmget(key_t key, size_t size, int shmflg); ``` 其中,key是共享内存的标识符,size是共享内存的大小,shmflg是共享内存的访问权限。shmget()函数返回一个共享内存的标识符,该标识符可以用于后续的共享内存操作。 2.映射共享内存: 使用shmat()函数将共享内存映射到进程的虚拟地址空间中,该函数的原型如下: ``` void *shmat(int shmid, const void *shmaddr, int shmflg); ``` 其中,shmid是共享内存的标识符,shmaddr是共享内存的映射地址,shmflg是共享内存的访问权限。shmat()函数返回一个指向共享内存映射区域的指针,该指针可以用于后续的共享内存操作。 3.使用共享内存: 通过共享内存映射的指针,进程可以直接访问共享内存中的数据,从而实现进程间的数据共享。需要注意的是,由于多个进程共享同一块内存区域,因此需要使用信号量等同步机制来避免数据竞争等问题。 4.撤销共享内存: 使用shmdt()函数将共享内存从进程的虚拟地址空间中撤销,该函数的原型如下: ``` int shmdt(const void *shmaddr); ``` 其中,shmaddr是共享内存的映射地址。shmdt()函数返回0表示成功,-1表示失败。 5.删除共享内存: 使用shmctl()函数删除共享内存,该函数的原型如下: ``` int shmctl(int shmid, int cmd, struct shmid_ds *buf); ``` 其中,shmid是共享内存的标识符,cmd是删除共享内存的命令,buf是共享内存的状态信息。shmctl()函数返回0表示成功,-1表示失败。 总结: Linux共享内存通过创建一块共享内存区域,使多个进程可以直接访问同一块内存,从而实现进程间的高效通信。需要注意的是,由于多个进程共享同一块内存区域,因此需要使用信号量等同步机制来避免数据竞争等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值