카테고리 없음
1. OS 부팅
초코chip
2024. 7. 8. 17:22
배경
- OS 프로그램은 HDD에 저장되어 있음
- 전원이 꺼지면 CPU와 MM의 내용이 전부 사라짐(휘발성)
-> 전원이 켜졌을 때, OS 프로그램을 MM에 load해야할 필요가 있음
하지만, 아래 문제가 존재
- 처음 전원이 켜지면 PC=0, AR=0 -> IR = M[AR]을 해야하는데 메인 메모리는 휘발성이라 0번지에 아무것도 없음
- 그러면 어떻게 부팅을 할까?
메모리 분리
메모리 0번지에 내용이 사라지지 않게, 메모리 영역을 분리해서 관리
- 상위 영역(0~1024 - 1): Boot ROM(Read Only Memory)
- ROM은 전원이 꺼져도 데이터가 사라지지 않음
- 하위 영역(1024~2^31-1): DRAM(Random Access Memory)
Boot ROM with 부트 로더
- 정의: 부팅 관련 작업을 하는 부트 스트랩 프로그램(부트 로더)가 저장되어 있는 공간
- 부트 로더는 제조사에서 만드는 SW
- 부트 로더 동작 방식
- 전원을 키면 부트 로더 실행 ( PC = 0, AR = 0 -> IR = M[AR] )
- 컴퓨터 하드웨어 시스템 초기화
- cpu 레지스터, device controller...
- OS프로그램 load
- HDD에서 OS 프로그램이 저장된 위치를 찾음
- DRAM의 빈 공간에 OS프로그램 load
- 전원이 꺼져 있기에 빈 공간의 첫 주소는 1024
- PC값을 OS의 첫 주소값으로 세팅 ( PC = 1024 )
- p.s) 왜 하드웨어 초기화를 OS가 아닌 부트로더가 진행하는가?
- 하나의 컴퓨터에는 매우 다양한 종류의 하드웨어가 존재
- 각 하드웨어 종류마다 검사방법과 초기화 방법이 다름
- OS 제조사는 어떤 하드웨어가 사용되었는지 모르기에 모든 초기화 방법에 대한 코드를 작성 -> OS 용량이 비효율적
- 컴퓨터 제조사에서는 어떤 부품을 사용했는지 알기에 그냥 제조사에서 ROM에 하드웨어 초기화 코드를 넣는것이 효율적
OS부팅
- 부트로더가 종료되면, OS 프로그램이 실행됨( PC = 1024 )
- OS 부팅의 끝은 아래 2개의 프로세스가 실행되는 것
- pid = 0 - 스케줄러(swapper()): 여러 프로세스의 실행 순서를 결정
- pid = 1 - init(): 프로세스를 생성 실행하여 실행
- 이후, 특정 사건(인터럽트)가 발생한다면
- interrupt가 발생
- fork() 시스템콜이 호출
- pthread_create() 시스템콜이 호출