Top Banner
What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk- sector
27

What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Dec 18, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

What is ‘bootstrapping’?

The process of loading larger programs for execution than can

fit within a single disk-sector

Page 2: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Our own ISR

• Last time we wrote our own ISR (Interrupt Service Routine) for handling ‘timer-tick’ interrupts while the CPU is in ‘real-mode’

• It was short, but it included two essential features of any interrupt service routine:– It preserved all register-values, and– It sent an EOI-command to the PIC

Page 3: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Only six instructions

ticks: .word 0 # stores the number of interrupts

#-------------------------------------------------------------------------------------------# Our own Interrupt Service Routine for the ‘timer-tick’ interrupt#-------------------------------------------------------------------------------------------isr_tick: push %ax # must preserve the AX register

incw %cs:ticks # add 1 to our ‘ticks’ counter

mov $0x20, %al # send a non-specific EOI out %al, $0x20 # to the interrupt controller

pop %ax # recover the saved AX value

iret # resume the interrupted task

Page 4: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Disassembly

• You can easily see how much storage is needed for the machine-code in our ISR:

$ objdump -d -Mi8086 tickdemo.o

This command-line switch asks for a ‘disassembly’ of the object-file

This command-line switch tells which kind of Machine that object-code was written for (namely, Intel 8086) so we’ll see 16-bit real-mode assembly mnemonics

Page 5: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

ISRs for other devices

• Our timer’s ISR consumed only 12-bytes (out of 512-bytes in a single disk-sector)

• But much more code is needed in an ISR for some of the other peripheral devices, such as the computer’s keyboard:– 105 keys, with up to 8 interpretations-per-key,

so potentially a minimum of 8-hundred bytes

• It wouldn’t all fit into a single disk-sector!

Page 6: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Serious x86 explorations

• Experimenting with most x86 features will require us to write larger-size demos than can be fit into one disk-sector (512 bytes)

• So we need a way to load such programs into memory when no OS is yet running

• And we need a convenient way to place such programs onto a persistent storage medium so they can easily be accessed

Page 7: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Our classroom setup

• Our workstations’ hard disks have been ‘partitioned’ in way that provides a large unused storage-area for us to use freely

• But other portions of these hard disks are dedicated to supporting vital courseware for students who are taking other classes

• We have to understand how to access our ‘free’ area without disrupting anyone else

Page 8: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Fixed-Size ‘blocks’

• All data-transfers to and from the hard disk are comprised of fixed-size blocks called ‘sectors’ (whose size equals 512 bytes)

• On modern hard disks, these sectors are identified by sector-numbers starting at 0

• This scheme for addressing disk sectors is known as Logical Block Addressing (LBA)

• So the hard disk is just an array of sectors

Page 9: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Visualizing the hard disk

0 1 2 3 …..

A large array of 512-byte disk sectors

Disk storage-capacity (in bytes) = (total number of sectors) x (512 bytes/sector)

Example: If disk-capacity is 250 GigaBytes, then the total number of disk-sectors can be found by division:

(250000000000 bytes) / (512 bytes-per-sector) assuming that you have a pocket-calculator capable of displaying enough digits!

Page 10: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Disk Partitions

• The total storage-area of the hard disk is usually subdivided into non-overlapping regions called ‘disk partitions’

Partition #1 Partition #2 Partition #3unused

Page 11: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Master Boot Record

• A small area at the beginning of the disk is dedicated to ‘managing’ the disk partitions

• In particular, sector number 0 is known as the Master Boot Record (very important!)

MBR

0 1 2 …

partition #1

Page 12: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Format of the MBR

• The MBR is subdivided into three areas:– The boot loader program (e.g., GRUB)– The ‘partition table’ data-structure– The MBR signature (i.e., 0x55, 0xAA)

signature (2 bytes)

Partition Table (64 bytes)

Boot Loader(446 bytes) 512

bytes

0

510

512

Page 13: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

‘Reading’ the MBR

• To see the hard disk’s Partition Table, we must ‘read’ the entire Master Boot Record

• (We ignore the boot-loader and signature)

• But we will need to understand the format of the data stored in that Partition Table

• We first need to know how to devise code that can transfer the MBR (sector 0) from the hard-disk into a suitable memory-area

Page 14: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Partition Table Entries

• The MBR is an array containing four data-structures (called ‘partition-table entries’):

Starting sectorID-number

Partition length(in sectors)

STATUS

TYPE 16

bytes

Some fields contain ‘obsolete’ information

Page 15: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

TYPE-ID

• Each partition-table entry has a TYPE-ID– TYPE-ID is 0x07 for a ‘Windows’ partition– TYPE-ID is 0x83 for our ‘Linux’ partition– TYPE-ID is 0x00 when the entry is ‘unused’

• You can find a list of TYPE-ID numbers posted on the internet (see our website)

• Our disks have an extra ‘Linux’ partition that nobody else is using this semester

Page 16: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

BIOS Disk Drive Services

• An assortment of disk-access functions is available under software Interrupt 0x13

• Originally there were just six functions (to support IBM-PC floppy diskette systems)

• More functions were added when PC/XTs introduced the use of small Hard Disks

• Now, with huge hard-disk capacities, there is a set of “Enhanced Disk Drive” services

Page 17: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Phoenix Technologies Ltd

• You can find online documentation for the BIOS EDD specification 3.0 (see website)

• We’ll use function 0x42 to read the MBR

• It requires initializing some fields in a small data-structure (the “Disk-Address Packet”)

• Then we load parameters in four registers (DS:SI = address of the DAP, DL = disk-ID and AH = 0x42) and execute ‘int $0x13’

Page 18: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

EDD Disk-Address Packet

reserved(=0x00)

sectorcount

reserved(=0x00)

packetlength

segment-addressof transfer-area

offset-addressof transfer area

Logical Block Address of disk-sector (64-bits)

Physical-address of memory transfer-area (64-bits)(in case segment:offset above is 0xFFFF:FFFF)

7 6 5 4 3 2 1 0

NOTE: The final 8-byte field (shown in gray) is not needed when we’re transferring disk-sectors into memory-regions that are addressable in ‘real-mode’ (i.e., address can be expressed in ‘segment:offset’ format)

Page 19: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

The MBR parameters

#-------------------------------------------------------------------------------------------packet: .byte 16, 0 # packet-size = 16 bytes

.byte 1, 0 # sector-count = 1 sector

.word 0x0200, 0x07C0 # transfer-area’s address

.quad 0 # MBR’s Logical Block Address#-------------------------------------------------------------------------------------------

Here are assembly language statements that you could use to create a Disk Address Packet for reading the hard-disk’s Master Boot Record into the memory-area immediately following the 512-byte BOOT_LOCN area

Our demo-program (named ‘cs630ipl.s’) uses statements similar to these.

Page 20: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

‘Extended’ partitions

• The hard-disk’s Master Boot Record only has room for four Partition-Table Entries

• But some systems need to use more than four disk-partitions, so a way was devised to allow one of the MBR’s partition-table entries to describe an ‘extended’ partition

• This scheme does not seem to have been ‘standardized’ yet -- hence, confusion!

Page 21: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

The Linux schemePartition #1

Partition #2

Partition #3

Extended Partition (partition #4)

Partition #5

Partition #6

Partition #7

Page 22: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

Our ‘cs630ipl.s’ boot-loader

• We created a ‘boot-loader’ that will work with Linux systems that have ‘extended’ disk-partitions (“Initial Program Loader”)

• It uses the EDD Read_Sectors function, and it will read 127 consecutive sectors from the disk’s final Linux-type partition

• It transfers these disk-sectors into the memory-arena at address 0x00010000

Page 23: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

The ‘ourfirst.s’ demo-program

• To demonstrate our boot-loader, we wrote a short program that can be ‘loaded’ into memory at 0x10000 and then executed

• It will just show a message (but thereby will verify that our boot-loader worked!)

• Our boot-loader requires that a special ‘program signature’ (i.e., 0xABCD) must occupy the first word of any program it attempts to execute (as a ‘sanity’ check)

Page 24: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

A depiction of ‘boot-strapping’

systemram

‘cs630ipl.b’

any demoprogram

0x00000000

0x00007C00

0x00010000

Step 1: The ROM-BIOS firmware loads GRUBStep 2: The user selects a disk-partition from

the GRUB program’s menu’s optionsStep 3: GRUB loads our ‘cs630ipl.b’ loaderStep 4: ‘cs630ipl.b’ loads our program demo

We install our ‘cs630ipl.b’ loader into the boot-sector of disk-partition number 4: $ dd if=cs630ipl.b of=/dev/sda4

We install the ‘ourfirst.b’ demo-program into the subsequent disk-sectors: $ dd if=ourfirst.b of=/dev/sda4 seek=1

Then we ‘reboot’ our machine to begin the bootstrapping process…

Page 25: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

In-class exercise #1

• Use ‘dd’ to install the ‘cs630ipl.b’ boot-loader on your classroom machine’s CS630 Partition:

$ dd if=cs630ipl.b of=/dev/sda4

• Also install the ‘ourfirst.b’ demo-program on your classroom machine’s disk, following sector 0:

$ dd if=ourfirst.b of=/dev/sda4 seek=1

• Then use the ‘fileview’ utility-program (from our class website, under ‘System Software’) to view the first few disk-sectors in partition number 4:

$ fileview /dev/sda4

Page 26: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

In-class exercise #2

• Try ‘rebooting’ your classroom machine, to see the message shown by ‘ourfirst.b’– Use ‘reboot’ to restart your machine– Watch for the GRUB menu-selection that will

launch the ‘boot-strapping’ process (i.e., the ‘CS 630 Partition’ GRUB-menu selection)

– Confirm that our ‘boot-loader’ works (i.e., by watching for the message that the ‘ourfirst.s’ demo-program is supposed to display

Page 27: What is ‘bootstrapping’? The process of loading larger programs for execution than can fit within a single disk-sector.

In-class exercise #3

• Can you apply what you’ve learned in our previous lessons to enhance the message that the ‘ourfirst.s’ demo-program prints, so that it would include some truly useful item of information about your machine’s state at boot-time?