the simple scheduler in embedded system @ osdc.tw 2014

77
The Simple Scheduler in Embedded System A simple scheduler module implemented in C StarNight @ OSDC.TW 2014

Upload: chien-hung-pan

Post on 15-Jan-2015

1.862 views

Category:

Technology


0 download

DESCRIPTION

https://github.com/starnight/simple-scheduler Video: https://www.youtube.com/watch?v=dm18UEsgOow

TRANSCRIPT

Page 1: The Simple Scheduler in Embedded System @ OSDC.TW 2014

The Simple Scheduler in Embedded System

A simple scheduler module implemented in C

StarNight @ OSDC.TW 2014

Page 2: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Who am I?

潘建宏 / Jian-Hong Pan (StarNight)About Me : http://about.me/StarNight

出沒在~

GitHub : starnightPTT : zack2004plurk : StarNightFacebook : Jian-Hong Pan

目前繼續在種花店當個打雜園丁 ~

Page 3: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Outline

● History

● OS concepts learned from textbooks

● Process & Scheduler

● What if …

● Simple Scheduler

● Simple Oscilloscope

Page 4: The Simple Scheduler in Embedded System @ OSDC.TW 2014

很久很久以前~

Long Long time ago ~

很久很久以前~

Long Long time ago ~

Page 5: The Simple Scheduler in Embedded System @ OSDC.TW 2014

There is a robot in every boy’s mind ~

每個男孩心中,都有一個機器人~

Page 6: The Simple Scheduler in Embedded System @ OSDC.TW 2014

There is an operating system in every computer scientist’s mind ~

上了大學之後,同學告訴我每位資工人的心中都有個 OS OS ~

Page 7: The Simple Scheduler in Embedded System @ OSDC.TW 2014

However, I am graduated fromdepartment of mechanical engineering ~

但我是機械系畢業的~

Page 8: The Simple Scheduler in Embedded System @ OSDC.TW 2014

For the expectation in my childhood, not only I attended the required classes, but also I sat

in the operating system class ~

為了男孩心中的機器人所以除了本科外,我旁聽 ~

Page 9: The Simple Scheduler in Embedded System @ OSDC.TW 2014

上課也可以很熱血!!!

Reference from internet

Page 10: The Simple Scheduler in Embedded System @ OSDC.TW 2014

欠的總是要還~

其實就是因為旁聽沒繳作業,所以畢業三年多後,

要補寫作業跟老師謝罪 XD

Page 11: The Simple Scheduler in Embedded System @ OSDC.TW 2014

My First Impression of OS

Operating System

Input Output

keyboardmousemicrophonetouchpadcomunication (in)...

screenheadsetcomunication (out)...

Page 12: The Simple Scheduler in Embedded System @ OSDC.TW 2014

There could be an OS in a robot, too!

Operating System

Input Output

GPIsensorscommand (in)comunication (in)...

GPOmotorscommand (out)comunication (out)...

Page 13: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Thinking furthermore

Apps

Operating System

Input Output

drivers scheduler etc ...

ETC

ready queue

data structure

Simple Data Structure @lightning talk COSCUP 2013

Page 14: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Data

Text

Heap

Stackmax

base 0

Process in Memory

Temporary data

Dynamic allocated memoryGlobal variables

Program code

Reference: Figure 3.1 of Operating System Concept, 8th

Page 15: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Usual Diagram of Process State

new

ready

terminated

running

Waiting

admitted exitinterrupt

scheduler dispatchI/O or event waitI/O or event

completion

Reference: Figure 3.2 of Operating System Concept, 8th

Page 16: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Process Control Block (PCB)

Process State

Process Number

Program Counter

Registers

Memory Limits

List of Open Files

Reference: Figure 3.3 of Operating System Concept, 8th

Page 17: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Scheduling when 4 Events Occurs

new

ready

terminated

running

Waiting

admitted exitinterrupt

scheduler dispatchI/O or event waitI/O or event

completion

Reference: Figure 3.2 of Operating System Concept, 8th

1

2

34

For Multitasking

For Multiprogramming

Page 18: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Scheduling Algorithms

● First-Come, First-Served (or FIFO)

● Round Robin

● Shortest Job First

● Shortest Remaining Time First

● Priority Scheduling

● Multilevel Queues

Page 19: The Simple Scheduler in Embedded System @ OSDC.TW 2014

What if ...

● The scheduled job (process) is as small & simple as a function, even is a function.

● Because of being small, the job will not be interrupted by timeout.

● Because of being simple, the job will not wait for the I/O or event. There is another job for I/O or event completion.

Page 20: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Running Waiting Ready

BeforeI/O or event

DuringI/O or event

AfterI/O or event

Compare Jobs’ Status Changing

Job #1 Job #2 Job #3

General

SimpleScheduler

TimeToDoAsync DoAsync AfterAsync

Page 21: The Simple Scheduler in Embedded System @ OSDC.TW 2014

In other words

● Break a single process into several jobs.

● Each job will not be interrupted.

● A job terminate immediately if it is finished.

● Do not save job’s state during context switching.

Page 22: The Simple Scheduler in Embedded System @ OSDC.TW 2014

This is not new idea

Related concepts:

● Functional programming

● Asynchronous function in Javascript

● Events of GUI programs

● Function pointer in C

ToDoAsyncFunc(pArgument, pAfterFunc)

Page 23: The Simple Scheduler in Embedded System @ OSDC.TW 2014

How do it keep the jobs until they are executed?

Save the jobs in somewhere,

maybe a queue.

How about make it like the ready queueof scheduler !?!?

Page 24: The Simple Scheduler in Embedded System @ OSDC.TW 2014

What is Simple Scheduler

● Simple Scheduler does "First In, First Out" (FIFO) scheduling works with no priority and non-preemptive scheduling scheme.

● It is the "Functions", which could also be called callback functions or jobs, that Simple Scheduler schedules.

Page 25: The Simple Scheduler in Embedded System @ OSDC.TW 2014

You can have it from

GitHub → StarNight → simple scheduler

https://github.com/starnight/simple-scheduler

PS. Wiki included

Page 26: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Job’s State in Simple Scheduler

new

ready

terminated

running

admitted exit

scheduler dispatch

Ready Queue

interrupt

scheduler dispatch

Waiting

I/O or event waitI/O or eventcompletion

Small & non-preemptive

Simple & non-blocking I/O

Page 27: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Job’s State in Simple Scheduler

new

ready

terminated

running

scheduler dispatch

Ready Queue

admitted exitDo scheduling

Page 28: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #1 Job #2

Ready Queue:First In, First Out (FIFO)

Page 29: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #1 Job #2

Ready Queue:

Job #1

Page 30: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #1 Job #2

Ready Queue:

Job #1 admits one Job #2Job #2

Job #2

Page 31: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2 Job #2

Ready Queue:

Page 32: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2 Job #2

Ready Queue:

Job #2

Page 33: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Page 34: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

An interrupt occurs during scheduling

Page 35: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

The interrupt admits one Job #3

Job #3

Job #3

Page 36: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Job #3

Page 37: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2 Job #3

Ready Queue:

Job #2

Page 38: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Job #3

Another interrupt occursduring Job #2 executing

Page 39: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Job #3

The interrupt admits one Job #1

Job #1

Job #1

Page 40: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2 Job #1

Ready Queue:

Job #3

Page 41: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #3

Ready Queue:

Job #1

Page 42: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #1

Ready Queue:

Job #3

Job #3

Page 43: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Ready Queue:

Job #1

Page 44: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Ready Queue:

Job #1

Job #1

Page 45: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #1

Ready Queue:

Job #1 admitsone Job #2

Job #2

Job #2

Page 46: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Page 47: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Job #2

Ready Queue:

Job #2

Page 48: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Ready Queue:

Page 49: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Timing Diagram

Ready Queue:

Page 50: The Simple Scheduler in Embedded System @ OSDC.TW 2014

When does it admit job?

● Booting (Before scheduler start to run)

● A Job is running

● During interrupt

Page 51: The Simple Scheduler in Embedded System @ OSDC.TW 2014

哥schedule的不是Process, 是Function

It is the functions, not the processes, that simple scheduler schedules.

Page 52: The Simple Scheduler in Embedded System @ OSDC.TW 2014

typedef void (*SS_CB)(void *);

● The job could be pass one parameter's pointer or NULL representing no parameter.

● The pointer of the parameter could be a native variable pointer or even a struture pointer.

Prototype of the Scheduled Function

Page 53: The Simple Scheduler in Embedded System @ OSDC.TW 2014

/* Packaged callback function (PCB). */typedef struct _SS_PACKAGED_CALLBACK { SS_CB cb; void *p;} SS_PCB;

PCB Structure Type

● cb : The callback function pointer of the job.

● p : The argument pointer going to be passed into the job.

Ready Queue

PCB of Job #3

PCB of Job #2

PCB of Job #1

FI

FO

Page 54: The Simple Scheduler in Embedded System @ OSDC.TW 2014

PCB vs PCB

Process State

Process Number

Program Counter

Registers

Memory Limits

List of Open Files

SS_CB cb

Callback function pointer

void *p

Parameter pointerfor the callback function

Original PCB Simple Scheduler PCB

Page 55: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Public Functions

● SSInit : Initial the scheduler.

● SSAdmitJob : Admit a job (callback function) into the ready queue.

● SSMainLoop : Main loop for system scheduling.

● SSBreak : Break scheduling.

● SSConsumeLeft : Consume left jobs in ready queue.

● SSDebug : Have the debug information of the scheduler.

Page 56: The Simple Scheduler in Embedded System @ OSDC.TW 2014

SSBreak(BC)

SSBreak(B)

Scheduler’s State in Simple Scheduler

Boot

Run

Break & Consume Left

SSConsumeLeft(n) orSSBreak(BC)

SSBreak(B)Break

B: SS_BREAKSCHEDULINGBC: SS_BREAKANDCONSUMELEFT

SSMainLoop()

Page 57: The Simple Scheduler in Embedded System @ OSDC.TW 2014

有了

Simple Scheduler

那就用用看吧!

Page 58: The Simple Scheduler in Embedded System @ OSDC.TW 2014

ADC & UART & Timer Labs+

Scheduler

實作一個窮到只剩下 $$ Scheduler的OS kernel

Simple OS for Simple Oscilloscope

https://github.com/starnight/Simple-Oscilloscope

Page 59: The Simple Scheduler in Embedded System @ OSDC.TW 2014

樸實無華 X 極簡

As simple as possible ~

Page 60: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Architecture

Scheduler

Direvers Timer

App #1 App #N

Kernel

User

Page 61: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Fill Modules into Architecture

Simple Scheduler

ADC USART

SysTimer

ADCSample

Process

Kernel

User

Timer

USARTCommunicate

MODBUS - like

PlatformDependentDrivers

Page 62: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Usage of Simple Scheduler

● SSInit()

● Admit leading jobs, ex: Wait command job.

● SSMainLoop()

● Interrupts admit jobs○ USART RX:

■ Admits a job when predefined RX queue is full.

○ USART TX: ■ Admits a job when predefined TX queue is empty.

Page 63: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Usage of Simple Scheduler (Cont.)

● Jobs admit jobs (Ex: Modbus-like package)○ Wait Commad:

■ Admits a wait command job if there is no command.■ Admits a check station job if there is a command.

○ Check station job:■ Admits a wait command job if not matched address.■ Parses commad and admits a corresponding job.

○ Corresponding job:■ ...

Page 64: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Simple Oscilloscpe - MCU Side

Page 65: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Simple Oscilloscpe - Wave Gen. Side

Page 66: The Simple Scheduler in Embedded System @ OSDC.TW 2014

MCU SideATMega328P

Wave Generator Side

Page 67: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Oscilloscope Console by python + pyserial + matplotlib

Page 68: The Simple Scheduler in Embedded System @ OSDC.TW 2014

畢業之後,

還可以重新仔細回味校園裡所學,

並將這些知識融合做出成果,

不也是一種 小確幸 ~

Page 69: The Simple Scheduler in Embedded System @ OSDC.TW 2014

● MVMC & ACAL Labs @ NCU○ 老師們與歷屆學長、同學和學弟們

● 作業系統Operating Systems on Share Course

● 我旁聽的作業系統課 @ NCU

● Textbook: Operating System Concepts

● Open Source Groups

Thanks to

Page 70: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Thank you ~ and Q & A

GitHub → starnight → simple-scheduler

Page 71: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Between Running and Ready State

ready running

interrupt

scheduler dispatch

Ready * NRunning Running

Job’s state according to time:

Time

Interrupted by timeoutFor Multitasking

Page 72: The Simple Scheduler in Embedded System @ OSDC.TW 2014

The Waiting State

Waiting

I/Oevent

waitI/Oevent

completion

WaitingRunning Ready

Job’s state according to time:

Time

For Multiprogramming

Page 73: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Diagram showing CPU switch from process to process

Reference: Figure 3.4 of Operating System Concept, 8th

Page 74: The Simple Scheduler in Embedded System @ OSDC.TW 2014

● SS_READYQUEUEOK

○ The ready queue works fine.

● SS_READYQUEUEEMPTY

○ The ready queue is empty.

● SS_READYQUEUEFULL

○ The ready queue is full.

Ready Queue StatusReady Queue

PCB of Job #3

PCB of Job #2

PCB of Job #1

FI

FO

Page 75: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Job’s State in Simple Scheduler

new

ready

terminated

running

admitted exit

scheduler dispatch

Ready Queue

SSAdmitJob

SSMainLoop

Page 76: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Scheduler Status

● SS_RUNSCHEDULING○ The scheduler is running.

● SS_BREAKSCHEDULING○ The scheduler is or is going to be broken into stop.

● SS_BREAKANDCONSUMELEFT○ The scheduler is or is going to be broken into stop

and consume the left jobs in ready queue.

Represented by SS_SSTATUS → run

Page 77: The Simple Scheduler in Embedded System @ OSDC.TW 2014

Recall thinking furthermore

Apps

Operating System

Input Output

drivers scheduler etc ...

ETC

ready queue

data structure