脚踏实地，仰望星空 - 2023年5月
type: channel
link: http://www.xn--yrvs09a.xn--ses554g/2023/05/
description: coding and learning
items: linux cpu调度策略
items: 区块链虚拟机

linux cpu调度策略
type: item
date: 2023-05-31T07:57:00+00:00
description: 在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内核中，锁机制被集成在调度器中，用于保护多个进程之间的协调运行，以确保实时响应任务的正确性和及时性。

区块链虚拟机
type: item
date: 2023-05-26T07:21:16+00:00
description: 区块链目前有多少种虚拟机区块链目前有多种虚拟机，其中最流行和常用的是以太坊虚拟机（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的出现，可以帮助开发者更方便地部署智能合约，并且可以支持高性能、高并发的区块链应用场景。