SlideShare a Scribd company logo
1 of 67
Operating System on USB to
backup data
Load of Matrix
17th An Jin Wang (PL)
17th Sin Dong In
17th Jang Jin Woo
2/66
Contents
• 프로젝트 소개
• 역할 분담
• 시스템 구성도
• 부트섹터
• Memory 관리
• Driver
• Task Switching
• File Manager
• File System
• Shell
• 힘들었던점과 노하우…
3/66
Project introduction
• 프로젝트 목적
– 부팅이 불가능한 PC에 자료를 백업 찾아 백업 할 때 사
용할 수 있는 작은 운영체제
• 개발기간
- 2007. 04 ~ 2007. 7(4개월)
• 개발환경
– Visual Studio 2003 ,NASM 0.98.39, MASM, TASM 5.0, VMWare
Workstation 5.5.3
– X86 Assembly, C
4/66
역 할 분 담
• 안진왕 (PL)
– 부트 섹터 및 부트 섹터 Writing 프로그램
– NTFS 파일 시스템 구현, 메모리 관리
– 프로젝트 일정 관리
• 신동인
– FAT32 파일 시스템 구현
– Command Shell
– HDD Driver 구현
• 장진우
– Interrupt Routine (Hard Disk, Keyboard, Etc),
– Task Switching Implementation,
– Driver(USB, Keyboard)
5/66
System Architecture(1)
USB 부팅이 가능한 PC
Kernel
Consol
O S
File System
Task Switching
Memory Manager
Device Driver
Interrupt
Booting Program
6/66
System Architecture(2)
스케쥴러
Device
Driver
하드웨어
Task 메모리관리
File System
Task 교체
7/66
Memory Map
Size Address contents
1536 byte
000000h ~
0005FFh
Interrupt vector, BIOS communication,
reserved
80 kbyte
010000h ~
023FFFh
OS kernel
7 kbyte
080000h ~
081BFFh
USB read, write code
1 kbyte
081C00h ~
081FFFh
USB reserved
120 kbyte
082000h ~
09FFFFh
USB buffer
960 kbyte
100000h ~
1EFFFFh
Application programe
64 kbyte
1F0000h ~
1FFFFFh
Application stack
2 Mbyte ~
200000h ~
FFFFFFFFh
Memory pool
8/66
부트 섹터 루틴
레지스터 세팅
Disk 파라미터 설정
MBR Partition
정보 Read
Hidden Sector와
비교 및 Disk Type 설정
나머지 부팅프로그램
로딩
커널 파일 검색
커널 파일 로딩
로딩 된 곳으로
점프
9/66
BIOS - INT 13
• 바이오스에서 하드디스크(USB포함)를 읽을때 사용하는
인터럽트임.
• INT 1E에 의해 디스크 파라미터의 설정 값을 참조
• 잘못된 디스크 파라미터 설정은 잘못된 섹터를 읽어 올 수
있음.
• INT13은 CHS(AH=02H), LBA(AH=42H) 이렇게 2개의 모
드가 있음.
10/66
디스크 파라미터 설정(INT 1E)
• 디스크 파라미터를 바이오스에 설정해 주는 것.
• 인터럽트 명령어라기 보다는 0050H:0022H에 11개의 바
이트를 직접 메모리에 써야함.
• 메모리 주소 78H에 522H값을 쓰고 7AH에 0000을 쓴다.
(메모리 복사 전에 이 주소에 값을 넣어 줘야함)
• 0x07BE부터 시작해서 11BYTE를 위의 주소에 복사
• 바이오스가 디스크 정보를 입력 시켜둔 메모리 주소임.
11/66
INT 15/AH=2401H
• A20을 Protected Mode에서 in/out명령으로 켜지 못하는
경우가 발생할 부트섹터에서 A20을 미리 켜 줄때 사용.
• 성공했을시
– CF = 0
– AH = 00h
• 실패 했을시
– CF = 1
– AH = status
– 01h keyboard controller is in secure mode
– 86h function not supported
12/66
부트섹터 만들때 주의할 점
• 바이오스에 따라 영향을 받을 수도 있음.
• 특히 INT 1E설정을 잘못 했을시 PC에 따라서 영향을 받음.
• USB는 HDD로 인식 하므로 INT13에서 DL 레지스터 값(읽어 들일 장
치 드라이버)을 80H로 함.
• 간혹 노트북에서 INT13으로 USB를 읽을때 DL이 0H로 해서 읽혀지
는 경우가 있는데, 그때 첫번째 섹터는 PBR임.
• INT13을 CHS든 LBA든 사용할때 가장 중요한 것은 메모리에 로딩이
될 주소를 잘 확인하는 것!
• 1개의 섹터씩 읽는 것이 좋음. 즉 1개의 클러스터가 8개의 섹터인 경
우 8번 반복문을 이용해서 읽는 것이 메모리 주소 관리에 좋음.
13/66
부트섹터 Writing 프로그램(1)
14/66
부트섹터 Writing 프로그램(2)
• 주의사항
– 절대로 프로그램 오작동에 의해 하드디스크의 부트섹터에 잘못된
데이터가 가는 일이 없도록 철저히 예외처리 할 것!
• 특히, CreateFile함수에 들어가는 첫번째 인자를 잘 확인할것!
– USB 메모리 스틱을 포멧하고 난 직후부터 컴퓨터에서 분리 될 때
까지 USB의 부트섹터에 어떤 데이터를 쓰더라도 결국 포맷된 직
후의 데이터 값으로 Reload됨.
• 화면에 장치를 제거하겠다는 메시지를 출력한 후
CM_Request_Device_EjectW()사용해서 USB를 소프트웨어 상으로
제거시켰음.
15/66
메모리 관리(1)
• 메모리 초기화
– 메모리 크기를 메모리 래핑을 이용해서 알아냄.
– 메모리를 블록 단위로 관리함.
– 필요한 메모리 크기가 블록 크기 보다 작아도 무조건 1
개의 블록을 차지한다.
– 메모리 블록 한 개는 1개의 메모리 디스크립터와 1:1로
매칭되어 있음.
– 메모리 블록 총 개수 = 메모리 디스크립터를 담은 블록
+ 할당 가능한 메모리 블록
16/66
메모리 관리(2)
• 메모리 할당
– 메모리 디스크립터 처음 부터 탐색 하기 시작
해서 메모리 블록 중 할당 되지 않는 최초 블록
을 찾음.
– 요청받은 메모리 블록 개수 만큼 연속적으로
비어있는지 검사.
– 연속적으로 비어 있으면 메모리 디스크립터의
Flag를 1(할당됨)로 지정
17/66
메모리 관리(3)
• 메모리 해제
– 메모리 주소를 보고 몇 번째 블록이 할당되었
는지 계산
– 그 주소 값을 가지고 있는 메모리 디스크립터
를 순차적으로 검색
– 찾은 메모리 블록에 대한 디스크립터 상태를
0(미할당)으로 변경 및 해당 블록을 클리어 한
다.
18/66
메모리 관리(4)
Memory Descriptor
Memory Descriptor
Memory Descriptor
Memory Descriptor
Memory Block
Memory Block
Memory Block
Memory Block
……….
19/66
GDT
• GDT 란?
– “커널이 메모리를 어떻게 사용하겠다” 라고 하는 설계서.
구분 이름 설명
Kernel Code 메모리 전영역, 커널이 사용하는 영역
Data 메모리 전영역, 커널이 사용하는 영역
Real Code 0x80000 64kbyte, Real mode가 사용하는 영역
Real Data 0x80000 64kbyte, Real mode가 사용하는 영역
Application Code 0x100000 FF * 4kbyte, 응용 프로그램이 사용하는 영역
Data 0x100000 FF * 4kbyte, 응용 프로그램이 사용하는 영역
TSS Descriptor Task gate Scheduler에 의해 실행되는 작업.
System init System을 초기화 할때만 사용.
Timer Timer Interrupt가 발생하였을 때.
Soft Task Switching
Switching
Timer 가 아닌 Software 적으로 Task switching를 하기위해.
Back to real mode Real mode로 전환시.
20/66
Interrupt and Exception
Vector NO. Description Type
0 Divide Error Fault
1 Debug Fault / Trap
2 NMI Interrupt Interrupt
3 Breakpoint Trap
4 Overflow Trap
5 BOUND Range Exceeded Fault
6 Invalid Opcode Fault
7 Device Not available Fault
8 Double fault Abort
9 Coprocessor segment overrun Fault
10 Invalid TSS Fault
11 Segment not present Fault
12 Stack segment fault Fault
13 General protection Fault
14 Page fault Fault
15 Intel reserved. Do not use. Fault
16 FPU error Fault
17 Alignment check Fault
18 Machine check Abort
19 SIMD Floating point exception Fault
• 현재의 예외 상황을 화면에 문자로
출력하고 원래 작업하던 곳으로
iret
• 몇몇개의 예외 상황에서는 상황을
화면에 문자로 출력후 시스템을 정
지 시킴.
21/66
Task Switching(1/5)
• TSS를 사용한 Task Switching
– TSS란?
• Task State Segment 의 약자로서 Task switching 시
CPU의 레지스터 값들을 메모리상에 저장하는 영역.
• Task 마다 하나씩 존재.
22/66
Task Switching(2/5)
• TSS는 104Byte의 크기를 가지며
CPU가 가지고 있는 거의 모든 레
지스터를 저장 할 수 있다.
• CR0, IDTR, GDTR 과 같이 시스템
전역으로 사용되는 레지스터는
TSS에 저장 되지 않는다.
• Task(Thread)마다 하나의 TSS를
가지고 있다.
23/66
Task Switching(3/5)
• Task switching은 언제 일어나는가?
– Hardware or Software interrupt.
– Jmp, call, iret command.
24/66
Task Switching(4/5)
Task 1 Task 2
CALL
Busy bit 1
NT bit 1
Busy bit 1
Previous task link
필드에 Task 1의
selector 저장
iret
TR : Task1 TSS
TR : Task2 TSS
CALL과 IRET에 의한 Task Switching
25/66
Task Switching(5/5)
생성된 모든
Kernel Threads
Start
Task Switching
USB Read, Write
Task switching
Get Next Thread TSS
Change 28h TSS Descriptor
Task switching
Get Next Thread TSS
Change 28h TSS Descriptor
Task switching
30h 28h 50h
40h 38h
INT 31h
IRET
IRET
IRET IRET
INT 30h
현재 OS에서의 Task switching 구성도.
Timer interrupt
26/66
USB(1/4)
• USB Mass storage에 접근 방법.
– Real Mode
• Host Controller Driver, USB Driver
• Bios가 USB Mass storage를 지원 한다면 Bios
Interrupt function 13h을 사용하여 접근 가능.
– Protected Mode
• Host Controller Driver, USB Driver
27/66
Bios Interrupt function
• Real Mode 에서만 사용 가능.
• Protected Mode에서는 사용 불가.
– Protected Mode는 IDT(Interrupt Descriptor
Table)를 재정의 하기 때문.
– 재정의를 하지 않으면?
28/66
USB(2/4)
• Protected Mode 에서 Bios Interrupt fuction
을 사용하기 위한 방법.
– Virtual 8086 Task를 생성 하여 Real Mode를
Emulation 한다.
– 직접 Real Mode로 전환 하고 다시 Protected
Mode로 돌아온다.
29/66
USB(3/4)
• Virtual 8060 Task Emulation
30/66
USB(4/4)
28h TSS
Threads
- Console
- File System
- USB Driver
- etc…
50h TSS
If (!Real mode flag)
0x80000에 각종 정보 채우기
jmp 0x80000 + 24
Else
EFLAGS NT bit set
iretd
0x80000
Error code
Return Address
Real mode flag
Index
Size
RW flag
INT 31h
iretd
USB RW
1. Idt 재 등록
2. Back to Real mode
3. If (Rwflag)
USB write
else
USB read
4. Real mode flag 설정
4. Protected mode 진입
5. Jmp Return Address
USB Read, Write
31/66
Keyboard Driver
• 키보드에서 어떤 이벤트가 발생 할 때마다 PIC의
Hardware Interrupt가 발생.
• Interrupt가 발생하면 해당 ISR이 호출 되는데, 키보드 ISR
에서는 0x60 port 로부터 한 바이트를 읽어 raw_queue에
저장.
• Keyboard Thread는 raw_queue에서 데이터를 하나씩 꺼
내어 실제 키 값으로 만들어줌.
32/66
Keyboard Driver
ISR_keyboard
Scancode = Readport(0x60)
PushRawKeydata(Scancode)
0x28
0x39
0x11
Keyboard Thread
PopRawScancode(key)
if (Function key)
flag set(alt, ctrl, shift, etc)
Else
KeyTable 참조
UserKey 생성.
PushKeydata(key)
‘G’
‘A’
‘7’
Function
GetKey()
함수 호출자
키눌림
RawQueue
UserQueue
33/66
File Manager(1/1)
• Command 기반의 인터페이스의 불편함을 조금
이라도 덜어보고자 제작된 프로그램.
• 예전의 Mdir과 유사한 느낌.
34/66
Process and Thread(1/4)
• PCB(Process Control Block)
– Process ID
– Next Process ID
– Head Thread pointer
– Thread count
– Process name
• TCB(Thread control Block)
– Parent process handle
– Thread ID
– Thread state
– Next thread pointer
– Start routine
– Stack base address
– Stack size
– TSS
35/66
Process and Thread(2/4)
Thread Thread Thread Thread Thread Thread
Process Process
Process Manager
Next Process pointer
Process Manager에 의해 관리되는 Process와 Thread
36/66
Process and Thread(3/4)
• Process의 생성
– PCB의 크기만큼 메모리 할당.
– Process ID, 이름 부여.
– Process Linked List에 추가.
• Thread의 생성
– TCB의 크기만큼 메모리 할당.
– Stack 메모리 할당.
– Thread ID 할당.
– TSS 설정.
37/66
Process and Thread(4/4)
• TSS 설정.
– Thread(Task) 생성후 scheduler에
의해 현재 Thread로 Task
switching이 되었을때 올바른 동작
을 하기 위해.
38/66
Scheduler
• 모든 Thread(Task)에게 시간을 균등하게 분배.
• 타이머가 발생 할 때마다 Task switching.
• Thread 에서 CPU를 사용하지 않아도 될 경우 Soft
Interrupt 30h을 사용하여 다른 Thread로 Task switching.
– 예 : 키보드 입력을 기다리는 경우.
하드디스크 드라이버
40/66
하드 디스크의 구성요소
• 트랙, 섹터, 실린더,
헤드로 구성.
• 하드디스크 드라이
버가 접근 시 필요
한 정보는 헤드, 실
린더, 섹터이다
41/66
CHS 구조
• 롬바이오스: 섹터: 6bit 헤드: 8bit 트랙: 10bit
• 하드디스크 컨트롤러 칩: 섹터:8bit 헤드:4bit 트랙:16bit
• 결과적으로 인식할 수 있는 용량: 섹터: 6bit 헤드:4bit 트
랙:10bit
• 초창기 IDE 하드디스크 용량 제한
– 2^20 * 512 BYTE = 528MB
42/66
LBA모드
• 0부터 시작하는 섹터번호를 접근하는 방식
• 전체 섹터수만 알면 된다
• LBA모드로 접근할 경우 논리 섹터번호는 CHS 구조로
분할되어하드 디스크 컨트롤러 칩에 전달된다
• 헤드: 4bit, 실린터: 16bit, 섹터: 8bit
43/66
하드디스크 레지스터(1/4)
• 데이터 레지스터
– 데이터를 읽거나 쓸 때 사용
• 에러 레지스터
표기 설명
BRK 엑세스 도중 잘못된 섹터를 만남
UNC 복구할 수 없는 데이터 오류
MC 마지막 엑세스 이후 미디어 교체
IDNF 지정된 섹터의 ID를 찾을 수 없음
MCR 미디어 교체 버턴을 누름
ABRT 잘못된 명령 또는 드라이브 오류에 의해 명령이 중단됨
TK0NF 0번 트랙을 찾을 수 없음
AMNF 지정된 섹터를 찾을 수 없음
44/66
하드디스크 레지스터(2/4)
• 섹터 카운트 레지스터
– 데이터를 읽거나 쓸 개수를 저장, 0은 256으로 인식
• 섹터 번호 레지스터
– 데이터를 읽거나 쓸 시작 섹터의 번호를 저장
• 하위 실린더 레지스터
– 실린더를 지정하는 16bit중 하위 8비트를 저장
• 상위 실린터 레지스터
– 실린더를 지정하는 16bit중 상위 8비트를 저장
45/66
하드디스크 레지스터(3/4)
• 드라이브 헤드 레지스터
– 드라이브와 헤드 번호를 지정
– LBA: LBA모드 접근시 1
– DRV: 마스터 1, 슬레이브 0
– HEAD: 헤드 번호를 지정
1 LBA 1 DRV HEAD(4)
46/66
하드디스크 레지스터(4/4)
• 상태 레지스터
– 명령레지스터와 같은 번지에 할당. 포트를 읽을 때는 상태 레지스터로 인식,
상태를 저장
• 명령 레지스터
– 데이터 기록시에 명령 레지스터로 인식, 명령을 저장
표기 설명
BUSY 명령 레지스터를 사용 중이므로 접근 할 수 없음
DRDY 드라이브가 명령을 받아들일 수 있는 상태
DF 드라이브에서 오류가 발생함
DSC SEEK 명령이 성공적으로 수행되었음
DRQ 데이터 레지스터로 정보를 주고 받을 수 있음
CORR 교정할 수 있는 오류 발생
IDX 매체 회전 중 인덱스 마크 부분이 헤드 바로 아래를 지날때
ERR 명령 실행 도중 오류 발생. 에러 레지스터에 원인이 저장
47/66
장치 정보얻기
• 드라이브가 BUSY가 클리어 될 때까지 기다린다
• 헤드 레지스터를 기록한다
• 명령 레지스터에 장치 검색명령을 준다
• 장치의 인터럽트를 기다린다
• 데이터 레지스터에서 데이터(장치 정보)를 읽는다
*인터럽트가 오지 않는다면 장치가 존재하지 않는 것이다
48/66
하드 디스크 읽기/쓰기
• 드라이브가 BUSY가 클리어 될 때까지 기다린다
• 섹터 카운트, 섹터 번호, 실린더, 헤드 레지스터에 데이터를 기록
• 명령 레지스터에 읽기/쓰기 명령을 준다
• 장치의 인터럽트를 기다린다
• 상태 레지스터가 DRQ가 Set 되기를 기다려 데이터 레지스터에서
한 섹터씩 읽는다.
*읽정 시간 인터럽트가 오지 않는다면 읽기/쓰기가 실패한 것
49/66
파일 시스템
50/66
파일 시스템
• 파일 시스템은 저장장치내에서 데이터를 읽고 쓰기위한
약속이다
• 파일 시스템은 파일을 찾기 쉽게 구조화하여 저장한다
• 파일 시스템은 하드디스크, CD-ROM, USB장치에 사용될
수 있다
• 필요성: 운영체제와 호환, 보안, 성능, 안정성 등
51/66
파티션
• 물리적인 디스크를 논리영역으로 나누어 관리가 편하게
하기 위해
• 0S영역과 Data영역으로 나누어 관리
• 여러 0S를 설치하기 위해
• 물리적 배드 섹터 영역을 제외하고 사용하기 위해
• 파일 시스템의 최대 용량이 부족해서(FAT16 최대용량: 2GB)
52/66
MBR(Master Boot Record)
• 부트 레코드(BR): 각 파티션의
첫번째 섹터에 위치,해당 파티
션의 os를 부팅해 주는 역할
• 마스터 부트 레코드(MBR): BR
호출을 위한 부트 코드와 파티
션 테이블이 있다
MBR
BR
File System
BR
File System
Boot Code
(446 BYTE)
Partition Table
(64BYTE)
Signature(0x55AA)
53/66
(BR)Boot Record
• 섹터의 바이트수
• 클러스터의 섹터수
• FAT테이블의 개수
• 총 섹터수
• FAT테이블의 크기
• 루트 디렉토리의 클러스터 값
• 볼륨 레이블
• 파일 시스템 타입
FAT항목들
Boot Code
Signature
54/66
MBR의 호출 과정
1. BIOS가 MBR(저장장치의 첫번째 섹터)로 점프.
2. MBR의 Boot Code에서 파티션 테이블을 읽어서
부팅이 가능한지 확인하여 해당 파티션의 BR로 점프
3. 부팅이 가능하다면 BR내의 Boot Code가 실행
55/66
FAT32 파일 시스템
• 예약 영역
– 미래를 위해 비워놓은 영역, 부트레코드의 저장과 주요항목백업(FSInfo)
• FAT 영역
– 파일이나 디렉토리의 할당을 관리, 클러스터의 값을 저장
• 데이터 영역
– 대부분의 영역, 데이터들이 저장되는 영역 클러스터 단위로 관리
*클러스터: 파일시스템에서 파일을 읽고 쓰는 최소 단위
BR 예약영역 FAT FAT(복사본) 데이터 영역
56/66
FAT 영역
• 파일이나 디렉토리의 할당을 관리, 클러스터 값이 저장되
어 있다.
00 00 00 09 00 00 00 11 0F FF FF FF
Cluster 2 Cluster 9 Cluster 17
Media Type Partition Table Cluster 2 Cluster 3
Cluster 4 Cluster 5 Cluster 6 Cluster 7
Cluster 8 Cluster 9 Cluster 10 Cluster 11
Cluster 12 Cluster 13 Cluster 14 Cluster 15
Cluster 16 Cluster 17 Cluster 18 Cluster 19
Cluster 20 Cluster 21 Cluster 22 Cluster 23
생략
57/66
Directory Entry
• 파일명, 확장자
• 속성
• 생성 날짜, 시간
• 수정한 날짜, 시간
• 최근 엑세스한 날짜
• 첫번째 클러스터 값
• 파일 크기
Directory Entry 1
Directory Entry 2
Directory Entry 3
Directory Entry 4
생략
58/66
NTFS(1/5) – 구조
Boot Record
Master File Table Data
• Boot Record
– 부팅 시키기 위한 기계어 코드와 NTFS의 Bios Parameter Block이 FAT32와 같이
있음.
• MFT(Master File Table)
– NTFS에서 파일 및 디렉토리의 정보를 담고 있는 테이블임
– MFT Entry 0~ 15번까지는 System 정보를 가지고 있음.
– MFT Entry 5번이 Root Directory로 모든 파일의 검색 시작 지점이 됨.
59/66
NTFS(2/5)
• 속성(Attribute)
– MFT가 가진 여러가지 설정 값.
– MFT에는 여러가지 종류가 있으며, MFT 종류에 따라
다른 속성을 가진다.
• $FILE_NAME : 파일의 정보
• $DATA : 파일의 데이터 저장
• $INDEX_ROOT : 파일의 목록을 가진 B Tree의 Root
• $INDEX_ALLOCATION : 파일의 목록을 가진 B Tree의 Child
Node를 가지고 있음
60/66
NTFS(3/5)
다른 속성
Attr
Header
Index Root
Header
Index
Entry1
End of
Node
Index Node
Header
Index
Entry2
Unused
Space
다른 속성
$INDEX_ROOT Attribute
AAA.TXT
MFT Entry 39
Child VCN : X
CCC.TXT
MFT Entry 57
Child VCN : X
파일을 가진 MFT의 모습 : 인덱스가 작은 경우
61/66
NTFS(4/5)
Index Record 0 Index Record 1 Index Record 2
MFT Entry
Header
Attr1
Header
Attr1
Content
$INDEX_ALLOC
Run List
Unused Space
1 0 1355 3
2 3 1397 6
3 생략
Start
VCN
Start
LCN
Num
Of Clus
$INDEX_ALL
Header
62/66
NTFS(5/5)
다른 속성
CCC.TXT
MFT 57
Child VCN : 0
End of
Node
Child VCN : 4
Start LCN Start VCN Len
1045 0 8
다른 속성
MFT Entry $INDEX_ROOT $INDEX_ALLOCATION
AAA.TXT
MFT 39
Child VCN : X
BBB.TXT
MFT 99
Child VCN : X
End of
Node
Child VCN : X
Cluster 1045
DDD.TXT
MFT 39
Child VCN : X
EEEEEEEEE.TXT
MFT 99
Child VCN : X
End of
Node
Child VCN : X
Index Record Header
VCN:0
Index Record Header
VCN:4
EEEEEE~1.TXT
MFT 99
Child VCN : X
63/66
Disk Cache
• 하드디스크의 느린Access 속도를 개선
– 하드디스크와 메모리는 현저한 Access 속도차이
• 이미 읽어들인 데이터를 다시 읽어들이지 않도록 한다
– 데이터 Access는 같거나 그 주위에 집중적으로 일어나는 경향이
있다
• 데이터가 기록되었을 때 매번 기록하지 않고 한꺼번에 기
록한다
64/66
Disk Cache 구현
• 해쉬 테이블: 엔트리의 빠른 탐색
• 엔트리의 관리
– 캐쉬 엔트리의 제한: 메모리의 한계
– 버리는 엔트리는 오래 참조되었으며 변경되지 않은 엔
트리
– 변경된 엔트리 리스트와 변경되지 않은 엔트리 리스트
로 관리하여
변경된 엔트리는 버릴 경우에 디스크에 기록한다.
65/66
Command Line Shell
• 사용자와 운영체제 내부(커널)와의 인터페이스를
제공.
• 명령어
– Dir: 파일과 디렉토리를 보여준다.
– Mkdir: 디렉토리를 만든다.
– Rmdir: 파일이나 디렉토리를 지운다.
– Copy: 파일을 복사한다.
– Type: 파일의 내용을 출력한다.
– Cd: 현재 경로를 바꾼다.
– Mdir: Lomos파일 관리자를 실행한다.
– Ps : Process 정보를 보여준다.
66/66
프로젝트 일정
4월 5월 6월 7월
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
자료검색
OS스터디
USB 스펙 분석
부트섹터
인터럽트 루틴
메모리 관리
스케쥴러
하드 디스크 드라이버
FAT32 파일시스템
NTFS 파일 시스템
커맨드 쉘
MDIR
디버깅및 테스트
67/66
힘들었던점과 노하우
• 힘들었던 점
– 디버깅 할 수 있는 툴이 없음
– 스펙이 정확하지 않을때..
– 바이오스에 대한 자료를 구하기 힘들었음.
• 노하우
– 디버깅 노하우 습득.
– 바이오스 및 운영체제의 이해

More Related Content

What's hot

운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
YoungGun Na
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
Chulgyu Shin
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
jumiss
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
sprdd
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어
Chulgyu Shin
 

What's hot (20)

시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
 
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
 
3.ubuntu custom
3.ubuntu custom3.ubuntu custom
3.ubuntu custom
 
20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
 
수퍼콜라이더 워크샵 자료
수퍼콜라이더 워크샵 자료수퍼콜라이더 워크샵 자료
수퍼콜라이더 워크샵 자료
 
리눅스 스터디 1회차
리눅스 스터디 1회차리눅스 스터디 1회차
리눅스 스터디 1회차
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
 
리눅스에 대하여
리눅스에 대하여리눅스에 대하여
리눅스에 대하여
 
[AIX] RDX Device Backup Guide
[AIX] RDX Device Backup Guide[AIX] RDX Device Backup Guide
[AIX] RDX Device Backup Guide
 
Ubuntu Host AP Setting
Ubuntu Host AP SettingUbuntu Host AP Setting
Ubuntu Host AP Setting
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치MarsBoard RK3066 Linux 설치
MarsBoard RK3066 Linux 설치
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어
 

Similar to 백업을 위한 USB운영체제 완료세미나

Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
QooJuice
 
포렌식 세미나.pptx
포렌식 세미나.pptx포렌식 세미나.pptx
포렌식 세미나.pptx
dalonn
 

Similar to 백업을 위한 USB운영체제 완료세미나 (20)

프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
Process에 대한 이해
Process에 대한 이해Process에 대한 이해
Process에 대한 이해
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
Operating system #1
Operating system #1Operating system #1
Operating system #1
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
저장장치
저장장치저장장치
저장장치
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드
 
Thread programming
Thread programmingThread programming
Thread programming
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)
 
[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민
 
강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요강좌 01 ARM 프로세서 개요
강좌 01 ARM 프로세서 개요
 
포렌식 세미나.pptx
포렌식 세미나.pptx포렌식 세미나.pptx
포렌식 세미나.pptx
 
부팅
부팅부팅
부팅
 
Processor
ProcessorProcessor
Processor
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 

More from Daniel Shin

0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
Daniel Shin
 
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
Daniel Shin
 
덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx
Daniel Shin
 

More from Daniel Shin (20)

<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
 
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
 
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
 
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
 
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
 
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
 
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
 
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
 
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
 
인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.doc인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.doc
 
덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx
 
C언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxC언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptx
 
포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptx포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptx
 
resume20220510v3.pptx
resume20220510v3.pptxresume20220510v3.pptx
resume20220510v3.pptx
 
미니메타버스v5.pptx
미니메타버스v5.pptx미니메타버스v5.pptx
미니메타버스v5.pptx
 
카툰월드기획서.pptx
카툰월드기획서.pptx카툰월드기획서.pptx
카툰월드기획서.pptx
 
STL.doc
STL.docSTL.doc
STL.doc
 
프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptx프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptx
 
3D 기술 세미나2주차
3D 기술 세미나2주차3D 기술 세미나2주차
3D 기술 세미나2주차
 
통한의원 안드로이드앱 기획서
통한의원 안드로이드앱 기획서통한의원 안드로이드앱 기획서
통한의원 안드로이드앱 기획서
 

백업을 위한 USB운영체제 완료세미나

  • 1. Operating System on USB to backup data Load of Matrix 17th An Jin Wang (PL) 17th Sin Dong In 17th Jang Jin Woo
  • 2. 2/66 Contents • 프로젝트 소개 • 역할 분담 • 시스템 구성도 • 부트섹터 • Memory 관리 • Driver • Task Switching • File Manager • File System • Shell • 힘들었던점과 노하우…
  • 3. 3/66 Project introduction • 프로젝트 목적 – 부팅이 불가능한 PC에 자료를 백업 찾아 백업 할 때 사 용할 수 있는 작은 운영체제 • 개발기간 - 2007. 04 ~ 2007. 7(4개월) • 개발환경 – Visual Studio 2003 ,NASM 0.98.39, MASM, TASM 5.0, VMWare Workstation 5.5.3 – X86 Assembly, C
  • 4. 4/66 역 할 분 담 • 안진왕 (PL) – 부트 섹터 및 부트 섹터 Writing 프로그램 – NTFS 파일 시스템 구현, 메모리 관리 – 프로젝트 일정 관리 • 신동인 – FAT32 파일 시스템 구현 – Command Shell – HDD Driver 구현 • 장진우 – Interrupt Routine (Hard Disk, Keyboard, Etc), – Task Switching Implementation, – Driver(USB, Keyboard)
  • 5. 5/66 System Architecture(1) USB 부팅이 가능한 PC Kernel Consol O S File System Task Switching Memory Manager Device Driver Interrupt Booting Program
  • 7. 7/66 Memory Map Size Address contents 1536 byte 000000h ~ 0005FFh Interrupt vector, BIOS communication, reserved 80 kbyte 010000h ~ 023FFFh OS kernel 7 kbyte 080000h ~ 081BFFh USB read, write code 1 kbyte 081C00h ~ 081FFFh USB reserved 120 kbyte 082000h ~ 09FFFFh USB buffer 960 kbyte 100000h ~ 1EFFFFh Application programe 64 kbyte 1F0000h ~ 1FFFFFh Application stack 2 Mbyte ~ 200000h ~ FFFFFFFFh Memory pool
  • 8. 8/66 부트 섹터 루틴 레지스터 세팅 Disk 파라미터 설정 MBR Partition 정보 Read Hidden Sector와 비교 및 Disk Type 설정 나머지 부팅프로그램 로딩 커널 파일 검색 커널 파일 로딩 로딩 된 곳으로 점프
  • 9. 9/66 BIOS - INT 13 • 바이오스에서 하드디스크(USB포함)를 읽을때 사용하는 인터럽트임. • INT 1E에 의해 디스크 파라미터의 설정 값을 참조 • 잘못된 디스크 파라미터 설정은 잘못된 섹터를 읽어 올 수 있음. • INT13은 CHS(AH=02H), LBA(AH=42H) 이렇게 2개의 모 드가 있음.
  • 10. 10/66 디스크 파라미터 설정(INT 1E) • 디스크 파라미터를 바이오스에 설정해 주는 것. • 인터럽트 명령어라기 보다는 0050H:0022H에 11개의 바 이트를 직접 메모리에 써야함. • 메모리 주소 78H에 522H값을 쓰고 7AH에 0000을 쓴다. (메모리 복사 전에 이 주소에 값을 넣어 줘야함) • 0x07BE부터 시작해서 11BYTE를 위의 주소에 복사 • 바이오스가 디스크 정보를 입력 시켜둔 메모리 주소임.
  • 11. 11/66 INT 15/AH=2401H • A20을 Protected Mode에서 in/out명령으로 켜지 못하는 경우가 발생할 부트섹터에서 A20을 미리 켜 줄때 사용. • 성공했을시 – CF = 0 – AH = 00h • 실패 했을시 – CF = 1 – AH = status – 01h keyboard controller is in secure mode – 86h function not supported
  • 12. 12/66 부트섹터 만들때 주의할 점 • 바이오스에 따라 영향을 받을 수도 있음. • 특히 INT 1E설정을 잘못 했을시 PC에 따라서 영향을 받음. • USB는 HDD로 인식 하므로 INT13에서 DL 레지스터 값(읽어 들일 장 치 드라이버)을 80H로 함. • 간혹 노트북에서 INT13으로 USB를 읽을때 DL이 0H로 해서 읽혀지 는 경우가 있는데, 그때 첫번째 섹터는 PBR임. • INT13을 CHS든 LBA든 사용할때 가장 중요한 것은 메모리에 로딩이 될 주소를 잘 확인하는 것! • 1개의 섹터씩 읽는 것이 좋음. 즉 1개의 클러스터가 8개의 섹터인 경 우 8번 반복문을 이용해서 읽는 것이 메모리 주소 관리에 좋음.
  • 14. 14/66 부트섹터 Writing 프로그램(2) • 주의사항 – 절대로 프로그램 오작동에 의해 하드디스크의 부트섹터에 잘못된 데이터가 가는 일이 없도록 철저히 예외처리 할 것! • 특히, CreateFile함수에 들어가는 첫번째 인자를 잘 확인할것! – USB 메모리 스틱을 포멧하고 난 직후부터 컴퓨터에서 분리 될 때 까지 USB의 부트섹터에 어떤 데이터를 쓰더라도 결국 포맷된 직 후의 데이터 값으로 Reload됨. • 화면에 장치를 제거하겠다는 메시지를 출력한 후 CM_Request_Device_EjectW()사용해서 USB를 소프트웨어 상으로 제거시켰음.
  • 15. 15/66 메모리 관리(1) • 메모리 초기화 – 메모리 크기를 메모리 래핑을 이용해서 알아냄. – 메모리를 블록 단위로 관리함. – 필요한 메모리 크기가 블록 크기 보다 작아도 무조건 1 개의 블록을 차지한다. – 메모리 블록 한 개는 1개의 메모리 디스크립터와 1:1로 매칭되어 있음. – 메모리 블록 총 개수 = 메모리 디스크립터를 담은 블록 + 할당 가능한 메모리 블록
  • 16. 16/66 메모리 관리(2) • 메모리 할당 – 메모리 디스크립터 처음 부터 탐색 하기 시작 해서 메모리 블록 중 할당 되지 않는 최초 블록 을 찾음. – 요청받은 메모리 블록 개수 만큼 연속적으로 비어있는지 검사. – 연속적으로 비어 있으면 메모리 디스크립터의 Flag를 1(할당됨)로 지정
  • 17. 17/66 메모리 관리(3) • 메모리 해제 – 메모리 주소를 보고 몇 번째 블록이 할당되었 는지 계산 – 그 주소 값을 가지고 있는 메모리 디스크립터 를 순차적으로 검색 – 찾은 메모리 블록에 대한 디스크립터 상태를 0(미할당)으로 변경 및 해당 블록을 클리어 한 다.
  • 18. 18/66 메모리 관리(4) Memory Descriptor Memory Descriptor Memory Descriptor Memory Descriptor Memory Block Memory Block Memory Block Memory Block ……….
  • 19. 19/66 GDT • GDT 란? – “커널이 메모리를 어떻게 사용하겠다” 라고 하는 설계서. 구분 이름 설명 Kernel Code 메모리 전영역, 커널이 사용하는 영역 Data 메모리 전영역, 커널이 사용하는 영역 Real Code 0x80000 64kbyte, Real mode가 사용하는 영역 Real Data 0x80000 64kbyte, Real mode가 사용하는 영역 Application Code 0x100000 FF * 4kbyte, 응용 프로그램이 사용하는 영역 Data 0x100000 FF * 4kbyte, 응용 프로그램이 사용하는 영역 TSS Descriptor Task gate Scheduler에 의해 실행되는 작업. System init System을 초기화 할때만 사용. Timer Timer Interrupt가 발생하였을 때. Soft Task Switching Switching Timer 가 아닌 Software 적으로 Task switching를 하기위해. Back to real mode Real mode로 전환시.
  • 20. 20/66 Interrupt and Exception Vector NO. Description Type 0 Divide Error Fault 1 Debug Fault / Trap 2 NMI Interrupt Interrupt 3 Breakpoint Trap 4 Overflow Trap 5 BOUND Range Exceeded Fault 6 Invalid Opcode Fault 7 Device Not available Fault 8 Double fault Abort 9 Coprocessor segment overrun Fault 10 Invalid TSS Fault 11 Segment not present Fault 12 Stack segment fault Fault 13 General protection Fault 14 Page fault Fault 15 Intel reserved. Do not use. Fault 16 FPU error Fault 17 Alignment check Fault 18 Machine check Abort 19 SIMD Floating point exception Fault • 현재의 예외 상황을 화면에 문자로 출력하고 원래 작업하던 곳으로 iret • 몇몇개의 예외 상황에서는 상황을 화면에 문자로 출력후 시스템을 정 지 시킴.
  • 21. 21/66 Task Switching(1/5) • TSS를 사용한 Task Switching – TSS란? • Task State Segment 의 약자로서 Task switching 시 CPU의 레지스터 값들을 메모리상에 저장하는 영역. • Task 마다 하나씩 존재.
  • 22. 22/66 Task Switching(2/5) • TSS는 104Byte의 크기를 가지며 CPU가 가지고 있는 거의 모든 레 지스터를 저장 할 수 있다. • CR0, IDTR, GDTR 과 같이 시스템 전역으로 사용되는 레지스터는 TSS에 저장 되지 않는다. • Task(Thread)마다 하나의 TSS를 가지고 있다.
  • 23. 23/66 Task Switching(3/5) • Task switching은 언제 일어나는가? – Hardware or Software interrupt. – Jmp, call, iret command.
  • 24. 24/66 Task Switching(4/5) Task 1 Task 2 CALL Busy bit 1 NT bit 1 Busy bit 1 Previous task link 필드에 Task 1의 selector 저장 iret TR : Task1 TSS TR : Task2 TSS CALL과 IRET에 의한 Task Switching
  • 25. 25/66 Task Switching(5/5) 생성된 모든 Kernel Threads Start Task Switching USB Read, Write Task switching Get Next Thread TSS Change 28h TSS Descriptor Task switching Get Next Thread TSS Change 28h TSS Descriptor Task switching 30h 28h 50h 40h 38h INT 31h IRET IRET IRET IRET INT 30h 현재 OS에서의 Task switching 구성도. Timer interrupt
  • 26. 26/66 USB(1/4) • USB Mass storage에 접근 방법. – Real Mode • Host Controller Driver, USB Driver • Bios가 USB Mass storage를 지원 한다면 Bios Interrupt function 13h을 사용하여 접근 가능. – Protected Mode • Host Controller Driver, USB Driver
  • 27. 27/66 Bios Interrupt function • Real Mode 에서만 사용 가능. • Protected Mode에서는 사용 불가. – Protected Mode는 IDT(Interrupt Descriptor Table)를 재정의 하기 때문. – 재정의를 하지 않으면?
  • 28. 28/66 USB(2/4) • Protected Mode 에서 Bios Interrupt fuction 을 사용하기 위한 방법. – Virtual 8086 Task를 생성 하여 Real Mode를 Emulation 한다. – 직접 Real Mode로 전환 하고 다시 Protected Mode로 돌아온다.
  • 30. 30/66 USB(4/4) 28h TSS Threads - Console - File System - USB Driver - etc… 50h TSS If (!Real mode flag) 0x80000에 각종 정보 채우기 jmp 0x80000 + 24 Else EFLAGS NT bit set iretd 0x80000 Error code Return Address Real mode flag Index Size RW flag INT 31h iretd USB RW 1. Idt 재 등록 2. Back to Real mode 3. If (Rwflag) USB write else USB read 4. Real mode flag 설정 4. Protected mode 진입 5. Jmp Return Address USB Read, Write
  • 31. 31/66 Keyboard Driver • 키보드에서 어떤 이벤트가 발생 할 때마다 PIC의 Hardware Interrupt가 발생. • Interrupt가 발생하면 해당 ISR이 호출 되는데, 키보드 ISR 에서는 0x60 port 로부터 한 바이트를 읽어 raw_queue에 저장. • Keyboard Thread는 raw_queue에서 데이터를 하나씩 꺼 내어 실제 키 값으로 만들어줌.
  • 32. 32/66 Keyboard Driver ISR_keyboard Scancode = Readport(0x60) PushRawKeydata(Scancode) 0x28 0x39 0x11 Keyboard Thread PopRawScancode(key) if (Function key) flag set(alt, ctrl, shift, etc) Else KeyTable 참조 UserKey 생성. PushKeydata(key) ‘G’ ‘A’ ‘7’ Function GetKey() 함수 호출자 키눌림 RawQueue UserQueue
  • 33. 33/66 File Manager(1/1) • Command 기반의 인터페이스의 불편함을 조금 이라도 덜어보고자 제작된 프로그램. • 예전의 Mdir과 유사한 느낌.
  • 34. 34/66 Process and Thread(1/4) • PCB(Process Control Block) – Process ID – Next Process ID – Head Thread pointer – Thread count – Process name • TCB(Thread control Block) – Parent process handle – Thread ID – Thread state – Next thread pointer – Start routine – Stack base address – Stack size – TSS
  • 35. 35/66 Process and Thread(2/4) Thread Thread Thread Thread Thread Thread Process Process Process Manager Next Process pointer Process Manager에 의해 관리되는 Process와 Thread
  • 36. 36/66 Process and Thread(3/4) • Process의 생성 – PCB의 크기만큼 메모리 할당. – Process ID, 이름 부여. – Process Linked List에 추가. • Thread의 생성 – TCB의 크기만큼 메모리 할당. – Stack 메모리 할당. – Thread ID 할당. – TSS 설정.
  • 37. 37/66 Process and Thread(4/4) • TSS 설정. – Thread(Task) 생성후 scheduler에 의해 현재 Thread로 Task switching이 되었을때 올바른 동작 을 하기 위해.
  • 38. 38/66 Scheduler • 모든 Thread(Task)에게 시간을 균등하게 분배. • 타이머가 발생 할 때마다 Task switching. • Thread 에서 CPU를 사용하지 않아도 될 경우 Soft Interrupt 30h을 사용하여 다른 Thread로 Task switching. – 예 : 키보드 입력을 기다리는 경우.
  • 40. 40/66 하드 디스크의 구성요소 • 트랙, 섹터, 실린더, 헤드로 구성. • 하드디스크 드라이 버가 접근 시 필요 한 정보는 헤드, 실 린더, 섹터이다
  • 41. 41/66 CHS 구조 • 롬바이오스: 섹터: 6bit 헤드: 8bit 트랙: 10bit • 하드디스크 컨트롤러 칩: 섹터:8bit 헤드:4bit 트랙:16bit • 결과적으로 인식할 수 있는 용량: 섹터: 6bit 헤드:4bit 트 랙:10bit • 초창기 IDE 하드디스크 용량 제한 – 2^20 * 512 BYTE = 528MB
  • 42. 42/66 LBA모드 • 0부터 시작하는 섹터번호를 접근하는 방식 • 전체 섹터수만 알면 된다 • LBA모드로 접근할 경우 논리 섹터번호는 CHS 구조로 분할되어하드 디스크 컨트롤러 칩에 전달된다 • 헤드: 4bit, 실린터: 16bit, 섹터: 8bit
  • 43. 43/66 하드디스크 레지스터(1/4) • 데이터 레지스터 – 데이터를 읽거나 쓸 때 사용 • 에러 레지스터 표기 설명 BRK 엑세스 도중 잘못된 섹터를 만남 UNC 복구할 수 없는 데이터 오류 MC 마지막 엑세스 이후 미디어 교체 IDNF 지정된 섹터의 ID를 찾을 수 없음 MCR 미디어 교체 버턴을 누름 ABRT 잘못된 명령 또는 드라이브 오류에 의해 명령이 중단됨 TK0NF 0번 트랙을 찾을 수 없음 AMNF 지정된 섹터를 찾을 수 없음
  • 44. 44/66 하드디스크 레지스터(2/4) • 섹터 카운트 레지스터 – 데이터를 읽거나 쓸 개수를 저장, 0은 256으로 인식 • 섹터 번호 레지스터 – 데이터를 읽거나 쓸 시작 섹터의 번호를 저장 • 하위 실린더 레지스터 – 실린더를 지정하는 16bit중 하위 8비트를 저장 • 상위 실린터 레지스터 – 실린더를 지정하는 16bit중 상위 8비트를 저장
  • 45. 45/66 하드디스크 레지스터(3/4) • 드라이브 헤드 레지스터 – 드라이브와 헤드 번호를 지정 – LBA: LBA모드 접근시 1 – DRV: 마스터 1, 슬레이브 0 – HEAD: 헤드 번호를 지정 1 LBA 1 DRV HEAD(4)
  • 46. 46/66 하드디스크 레지스터(4/4) • 상태 레지스터 – 명령레지스터와 같은 번지에 할당. 포트를 읽을 때는 상태 레지스터로 인식, 상태를 저장 • 명령 레지스터 – 데이터 기록시에 명령 레지스터로 인식, 명령을 저장 표기 설명 BUSY 명령 레지스터를 사용 중이므로 접근 할 수 없음 DRDY 드라이브가 명령을 받아들일 수 있는 상태 DF 드라이브에서 오류가 발생함 DSC SEEK 명령이 성공적으로 수행되었음 DRQ 데이터 레지스터로 정보를 주고 받을 수 있음 CORR 교정할 수 있는 오류 발생 IDX 매체 회전 중 인덱스 마크 부분이 헤드 바로 아래를 지날때 ERR 명령 실행 도중 오류 발생. 에러 레지스터에 원인이 저장
  • 47. 47/66 장치 정보얻기 • 드라이브가 BUSY가 클리어 될 때까지 기다린다 • 헤드 레지스터를 기록한다 • 명령 레지스터에 장치 검색명령을 준다 • 장치의 인터럽트를 기다린다 • 데이터 레지스터에서 데이터(장치 정보)를 읽는다 *인터럽트가 오지 않는다면 장치가 존재하지 않는 것이다
  • 48. 48/66 하드 디스크 읽기/쓰기 • 드라이브가 BUSY가 클리어 될 때까지 기다린다 • 섹터 카운트, 섹터 번호, 실린더, 헤드 레지스터에 데이터를 기록 • 명령 레지스터에 읽기/쓰기 명령을 준다 • 장치의 인터럽트를 기다린다 • 상태 레지스터가 DRQ가 Set 되기를 기다려 데이터 레지스터에서 한 섹터씩 읽는다. *읽정 시간 인터럽트가 오지 않는다면 읽기/쓰기가 실패한 것
  • 50. 50/66 파일 시스템 • 파일 시스템은 저장장치내에서 데이터를 읽고 쓰기위한 약속이다 • 파일 시스템은 파일을 찾기 쉽게 구조화하여 저장한다 • 파일 시스템은 하드디스크, CD-ROM, USB장치에 사용될 수 있다 • 필요성: 운영체제와 호환, 보안, 성능, 안정성 등
  • 51. 51/66 파티션 • 물리적인 디스크를 논리영역으로 나누어 관리가 편하게 하기 위해 • 0S영역과 Data영역으로 나누어 관리 • 여러 0S를 설치하기 위해 • 물리적 배드 섹터 영역을 제외하고 사용하기 위해 • 파일 시스템의 최대 용량이 부족해서(FAT16 최대용량: 2GB)
  • 52. 52/66 MBR(Master Boot Record) • 부트 레코드(BR): 각 파티션의 첫번째 섹터에 위치,해당 파티 션의 os를 부팅해 주는 역할 • 마스터 부트 레코드(MBR): BR 호출을 위한 부트 코드와 파티 션 테이블이 있다 MBR BR File System BR File System Boot Code (446 BYTE) Partition Table (64BYTE) Signature(0x55AA)
  • 53. 53/66 (BR)Boot Record • 섹터의 바이트수 • 클러스터의 섹터수 • FAT테이블의 개수 • 총 섹터수 • FAT테이블의 크기 • 루트 디렉토리의 클러스터 값 • 볼륨 레이블 • 파일 시스템 타입 FAT항목들 Boot Code Signature
  • 54. 54/66 MBR의 호출 과정 1. BIOS가 MBR(저장장치의 첫번째 섹터)로 점프. 2. MBR의 Boot Code에서 파티션 테이블을 읽어서 부팅이 가능한지 확인하여 해당 파티션의 BR로 점프 3. 부팅이 가능하다면 BR내의 Boot Code가 실행
  • 55. 55/66 FAT32 파일 시스템 • 예약 영역 – 미래를 위해 비워놓은 영역, 부트레코드의 저장과 주요항목백업(FSInfo) • FAT 영역 – 파일이나 디렉토리의 할당을 관리, 클러스터의 값을 저장 • 데이터 영역 – 대부분의 영역, 데이터들이 저장되는 영역 클러스터 단위로 관리 *클러스터: 파일시스템에서 파일을 읽고 쓰는 최소 단위 BR 예약영역 FAT FAT(복사본) 데이터 영역
  • 56. 56/66 FAT 영역 • 파일이나 디렉토리의 할당을 관리, 클러스터 값이 저장되 어 있다. 00 00 00 09 00 00 00 11 0F FF FF FF Cluster 2 Cluster 9 Cluster 17 Media Type Partition Table Cluster 2 Cluster 3 Cluster 4 Cluster 5 Cluster 6 Cluster 7 Cluster 8 Cluster 9 Cluster 10 Cluster 11 Cluster 12 Cluster 13 Cluster 14 Cluster 15 Cluster 16 Cluster 17 Cluster 18 Cluster 19 Cluster 20 Cluster 21 Cluster 22 Cluster 23 생략
  • 57. 57/66 Directory Entry • 파일명, 확장자 • 속성 • 생성 날짜, 시간 • 수정한 날짜, 시간 • 최근 엑세스한 날짜 • 첫번째 클러스터 값 • 파일 크기 Directory Entry 1 Directory Entry 2 Directory Entry 3 Directory Entry 4 생략
  • 58. 58/66 NTFS(1/5) – 구조 Boot Record Master File Table Data • Boot Record – 부팅 시키기 위한 기계어 코드와 NTFS의 Bios Parameter Block이 FAT32와 같이 있음. • MFT(Master File Table) – NTFS에서 파일 및 디렉토리의 정보를 담고 있는 테이블임 – MFT Entry 0~ 15번까지는 System 정보를 가지고 있음. – MFT Entry 5번이 Root Directory로 모든 파일의 검색 시작 지점이 됨.
  • 59. 59/66 NTFS(2/5) • 속성(Attribute) – MFT가 가진 여러가지 설정 값. – MFT에는 여러가지 종류가 있으며, MFT 종류에 따라 다른 속성을 가진다. • $FILE_NAME : 파일의 정보 • $DATA : 파일의 데이터 저장 • $INDEX_ROOT : 파일의 목록을 가진 B Tree의 Root • $INDEX_ALLOCATION : 파일의 목록을 가진 B Tree의 Child Node를 가지고 있음
  • 60. 60/66 NTFS(3/5) 다른 속성 Attr Header Index Root Header Index Entry1 End of Node Index Node Header Index Entry2 Unused Space 다른 속성 $INDEX_ROOT Attribute AAA.TXT MFT Entry 39 Child VCN : X CCC.TXT MFT Entry 57 Child VCN : X 파일을 가진 MFT의 모습 : 인덱스가 작은 경우
  • 61. 61/66 NTFS(4/5) Index Record 0 Index Record 1 Index Record 2 MFT Entry Header Attr1 Header Attr1 Content $INDEX_ALLOC Run List Unused Space 1 0 1355 3 2 3 1397 6 3 생략 Start VCN Start LCN Num Of Clus $INDEX_ALL Header
  • 62. 62/66 NTFS(5/5) 다른 속성 CCC.TXT MFT 57 Child VCN : 0 End of Node Child VCN : 4 Start LCN Start VCN Len 1045 0 8 다른 속성 MFT Entry $INDEX_ROOT $INDEX_ALLOCATION AAA.TXT MFT 39 Child VCN : X BBB.TXT MFT 99 Child VCN : X End of Node Child VCN : X Cluster 1045 DDD.TXT MFT 39 Child VCN : X EEEEEEEEE.TXT MFT 99 Child VCN : X End of Node Child VCN : X Index Record Header VCN:0 Index Record Header VCN:4 EEEEEE~1.TXT MFT 99 Child VCN : X
  • 63. 63/66 Disk Cache • 하드디스크의 느린Access 속도를 개선 – 하드디스크와 메모리는 현저한 Access 속도차이 • 이미 읽어들인 데이터를 다시 읽어들이지 않도록 한다 – 데이터 Access는 같거나 그 주위에 집중적으로 일어나는 경향이 있다 • 데이터가 기록되었을 때 매번 기록하지 않고 한꺼번에 기 록한다
  • 64. 64/66 Disk Cache 구현 • 해쉬 테이블: 엔트리의 빠른 탐색 • 엔트리의 관리 – 캐쉬 엔트리의 제한: 메모리의 한계 – 버리는 엔트리는 오래 참조되었으며 변경되지 않은 엔 트리 – 변경된 엔트리 리스트와 변경되지 않은 엔트리 리스트 로 관리하여 변경된 엔트리는 버릴 경우에 디스크에 기록한다.
  • 65. 65/66 Command Line Shell • 사용자와 운영체제 내부(커널)와의 인터페이스를 제공. • 명령어 – Dir: 파일과 디렉토리를 보여준다. – Mkdir: 디렉토리를 만든다. – Rmdir: 파일이나 디렉토리를 지운다. – Copy: 파일을 복사한다. – Type: 파일의 내용을 출력한다. – Cd: 현재 경로를 바꾼다. – Mdir: Lomos파일 관리자를 실행한다. – Ps : Process 정보를 보여준다.
  • 66. 66/66 프로젝트 일정 4월 5월 6월 7월 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 자료검색 OS스터디 USB 스펙 분석 부트섹터 인터럽트 루틴 메모리 관리 스케쥴러 하드 디스크 드라이버 FAT32 파일시스템 NTFS 파일 시스템 커맨드 쉘 MDIR 디버깅및 테스트
  • 67. 67/66 힘들었던점과 노하우 • 힘들었던 점 – 디버깅 할 수 있는 툴이 없음 – 스펙이 정확하지 않을때.. – 바이오스에 대한 자료를 구하기 힘들었음. • 노하우 – 디버깅 노하우 습득. – 바이오스 및 운영체제의 이해