방학 하는 동안 노느라 너무 오랜만이라 잘 생각나지않는데
이번에는 부팅 과정을 다룬다.
부팅
하드웨어 초기화 과정 정도로 이해하고 있었는데
리셋 익셉션 핸들러 처리 후 C언어로 넘어가기 직전의 상태 혹은 펌웨어가 대기하는 상태 정도라고한다.
QEMU 메모리
디폴트로 128MB 할당
실행파일은 메모리를 text, data, bss 영역으로 나누어 사용
메모리 배치
- 고속 저용량 메모리 : text, data(일부 빠른처리 필요한거)
- 저속 대용량 메모리 : data, bss
<-> qemu에선 그냥 구분없이 배치, 실무에선 매우 중요
text 영역
- 코드에 관한 부분, 작아도 되지만 1MB 할당.
- 익셉션 벡터 테이블도 text 영역에 포함시킴 -> 0x0000 0000에서 시작
- 크기가 1MB 이므로 0x000F FFFF
2^10 = 1kb
2^20 = 1MB = 2^4 * 2^4 * 2^4 * 2^4 *2^4
data 영역과 bss영역 배치 시 고려 사항
- 아래의 사항을 고려하여 순서와 크기를 고려해야함.
- 데이터 형태 : 동작 모드별 스택, 태스크 스택, 전역 변수, 동적 메모리 영역
- 데이터 속성 : 성능 중요한지, 큰 공간이 필요한지, 공유인지
<-> QEMU에선 크게 중요하지 않으니 순서대로 각 동작모드별로 1MB씩 할당
동작 모드
- USR, SYS : 0x0010 0000 ~ 0x002F FFFF(2MB)
- SVC : 0x0030 0000 ~ 0x003F FFFF
- IRQ : 0x0040 0000 ~ 0x004F FFFF
- FIQ : 0x0050 0000 ~ 0x005F FFFF
- ABT : 0x0060 0000 ~ 0x006F FFFF
- UND : 0x0070 0000 ~ 0x007F FFFF
ARM 동작모드
- USR : normal program execution mode
- SYS : run privileged operating system tasks
- IRQ (interrupt request) : when a low priority(normal) interrupt is raised
- FIQ : when a high priority(fast) interrupt is raised
- ABT(abort) : Used to handle memory access violations
- UND(undefined instruction) : Used to handled undefined instruction
http://recipes.egloos.com/4985227
메모리 맵
- 테스크 공간 : 태스크 별 1MB 할당, 최대 64개 -> 64MB
- 전역변수 공간 : 1MB
- 나머지 : 동적 할당
계속 진행하려고 해도
링커스크립트 부분을 잘 몰라 진행하기가 어렵다
다른거 부터 잠깐하고 돌아와야겠다.
'컴퓨터과학 > os' 카테고리의 다른 글
navilos - 6. 익셉션 핸들러 구현2, 메인함수 진입 (0) | 2022.08.18 |
---|---|
navilos - 5. 익셉션 핸들러 구현 1 (0) | 2022.08.17 |
navilos - 4. 어셈블리어 공부하며 본 초기코드 (0) | 2022.08.17 |
navilos - 2. 펌웨어 만들고, 빌드 자동화 (0) | 2022.07.17 |
navilos - 1. 개요와 개발환경 구축 (0) | 2022.07.17 |