2023年5月

在Linux系统中,抢占式调度是通过内核的调度器来实现的,它在内核中的实现是一种基于时间片轮转(Round-Robin)和优先级的调度策略。Linux 2.6内核版本之后,引入了完全抢占式内核模型,这意味着即使在内核中运行的代码,也可以在各种情况下被中断或抢占。以下是Linux如何进行抢占式调度的大体步骤:

1.在Linux系统中,每个进程都有一个优先级,通常从0到139。进程的优先级可以通过nice或renice命令来调整。

2.Linux内核具有多个运行队列,每个队列都包含具有相同优先级的进程。这可以确保高优先级进程拥有更好的CPU运行时间,并且不会一直阻塞在等待队列中。

3.内核启动后,将由特殊进程init启动的第一个进程(通常是/bin/bash)添加到运行队列中。

4.运行队列被周期性地遍历,内核为每个队列中的进程分配一个时间片。

5.当进程的时间片耗尽时,内核将终止该进程的运行,并将其从当前队列中删除。

6.如果在一个队列中运行的进程需要等待I/O或其他资源(例如磁盘、网络等),那么该进程将被放入相应的等待队列中。当等待的资源变为可用时,内核将重新将该进程添加到适当的运行队列中。

7.如果有挂起的高优先级进程,内核通过抢占机制将该进程插入到当前进程的时间片中,并为其提供CPU时间片来运行。此时,内核将挂起原来运行的进程,并继续运行更高优先级的进程。

通过上述步骤,Linux内核实现了一种抢占式调度的机制,它可以在实时响应和非实时任务之间找到平衡点,并按照优先级给予适当的CPU时间。

锁机制

在抢占式调度中,为了确保多个进程之间的协调运行,通常需要对一些共享资源进行加锁。锁的机制可以防止出现一些并发问题,比如竞争条件、死锁等等,保护进程的完整性。

在Linux内核中,抢占式调度使用了自旋锁和读写锁(spinlock和rwlock)来确保临界区的互斥,而不会出现睡眠锁(sleep lock)的情况,以免影响响应时间。自旋锁允许一个持有锁的进程能够自旋在一个循环中,等待其他进程放弃锁,而不是进入等待队列或挂起状态。自旋锁不能用于保护长时间运行的临界区,否则会导致缺乏可调度性(优先级反转问题,优先级比自旋锁持有者高的进程被阻塞在自旋锁上)。而读写锁则允许许多进程同时读取资源,但只允许一个进程对资源进行写入操作。

因此,在实现抢占式调度时,锁的使用是必须的。在Linux内核中,锁机制被集成在调度器中,用于保护多个进程之间的协调运行,以确保实时响应任务的正确性和及时性。

区块链目前有多少种虚拟机

区块链目前有多种虚拟机,其中最流行和常用的是以太坊虚拟机(Ethereum Virtual Machine,EVM),其他主要的区块链虚拟机包括NEO虚拟机(NEO Virtual Machine,NeoVM)、EOS虚拟机(EOS Virtual Machine,EVM)和Cardano虚拟机等。不同的区块链平台选择不同的虚拟机,以适应其应用场景和开发要求。

波场用的是什么虚拟机

波场(TRON)使用的是TRON虚拟机(TVM,TRON Virtual Machine)。TVM是TRON生态系统的核心组件,它提供了一种基于Solidity语言的智能合约执行环境,与以太坊虚拟机(EVM)类似,但在性能和资源消耗方面有所优化。TVM的出现,可以帮助开发者更方便地部署智能合约,并且可以支持高性能、高并发的区块链应用场景。