주 부트로더(MBR에 설치됨)로 사용하거나 2차 부트로더(부팅 가능한 파티션에 설치됨)로 사용할 수 있다. 파티션에 위치하게 되면 이를 불러올 무언가가 MBR에 위치해야 한다. Linux, FreeBSD(Berkeley Software Distribution), NetBSD, OpenBSD는 LILO와 GRUB을 모두 지원하며, 설정 파일을 통해서 윈도우 XP에서도 사용할 수 있다. 두 가지 모두 루트 사용자의 싱글유저모드로 부팅하는 기능을 제공한다.

LILO는 특정 파일 시스템에 의지하지 않는다.
플로피 디스크와 하드 디스크에서 가능하다.(OS 시동)
바이오스(BIOS) 드라이버를 통해 하드웨어와 접근 가능하다.
예전의 배포판의 대부분이 LILO를 기본 부트로더로 사용했다.



GRUB의 가장 큰 특징은 파일시스템과 커널 포맷을 이해한다는 점이다.
따라서 디스크상에서 커널의 물리적인 위치를 알 필요 없이 단지 파일명과 커널이 위치하고 있는 파티션만 알고 있으면 커널을 로드할 수 있다. LILO의 경우 부트로더가 커널의 하드디스크상의 물리적인 위치를 알고 있어야 한다. 따라서 커널을 다시 설치할 때마다 ‘lilo’를 실행해 부트로더를 다시 심어 주어야 하지만, GRUB의 경우 파일명만 알면 되기 때문에 파일명이 바뀌지 않는 한 다시 실행해 줄 필요가 없다.

현재 GRUB은 다음과 같은 기능들을 제공한다.

1. a.out 포맷과 ELF 포맷의 커널을 읽어들일 수 있다.
2. Linux, FreeBSD, NetBSD, OpenBSD등 비-멀티부트 커널을 지원한다.
3. 멀티플 모듈을 로드할 수 있다.
4. 텍스트 형식의 설정 파일을 제공한다.
5. 메뉴 인터페이스를 제공한다.
6. 유연한 커맨드라인 인터페이스를 제공한다.
7. BSD FFS, FAT16, FAT32, Minix, ext2 그리고 ReiserFS 파일시스템을 지원한다.
8. gzip으로 압축된 파일을 다룰 수 있다.
9. BIOS에서 인식되는 모든 장치에 엑세스할 수   있다.


GRUB에도 장점만 있는 것은 아니다. 먼저, 윈도우 등 “chainloader”를 사용해야 하는 운영체제가 첫 번째 하드디스크 외의 다른 하드디스크, 예를 들어 “hdb”에 설치되어 있을 경우 GRUB을 사용해서는 이 운영체제로 부팅할 수 없다. 다음으로, 플로피 디스크나 CD-ROM 부팅을 지원하지 않는다. 마지막으로 다른 부트로더에 비해 덩치가 상당히 크다. 특히 GRUB 플로피디스크를 이용하여 부팅할 때에는 stage2가 로드되는 동안 GRUB 자체를 부팅하는 듯한 느낌이 들 정도다. 하지만 요즘 대부분의 배포판에서는 GRUB을 기본 부트로더로 제공하고 있다.

부트로더란 무엇인가?? 왜 사용하는 거지??
: machine이 직접 OS를 로드하면 BIOS는 우선 512 바이트의 부팅 가능한 미디어(master boot record 또는 MBR)를 읽는다. 하나의 MBR에 단 하나의 OS의 부트 레코드를 저장할 수 있기 때문에 여러 OS가 필요할 경우 문제는 자명하다. 따라서 우리에겐 보다 유연한 부트 로더가 필요하다.

마스터 부트 레코드는 부트 로더 프로그램 전체 또는 일부, 그리고 파티션 테이블(나머지 미디어가 파티션으로 나뉘어지는 방법에 대한 정보를 포함하고 있음.)을 가지고 있다. BIOS가 로딩되면 하드 드라이브의 첫 번째 섹터에 있는 데이터를 찾는다. 그것이 MBR이다. MBR에 저장된 데이터를 사용하여 BIOS는 부트 로더를 활성화한다.

BIOS가 액세스 할 수 있는 데이터 양은 매우 적기 때문에, 대부분의 부트 로더는 두 단계로 로딩된다. 첫 번째 단계에서, BIOS는 initial program loader 또는 IPL로 알려진 부트 로더의 일부를 로딩한다. IPL이 파티션 테이블을 검사하고, 다양한 미디어에 존재하는 데이터를 로딩할 수 있다. 이 작동은 두 번째 단계의 부트 로더가 처음에 자리잡기 위해 사용된다. 여기에는 로더의 나머지 부분이 포함된다.

두 번째 단계의 부트 로더는 부트 로더의 핵심이라 할 수 있다. 많은 사람들은 이것을 부트 로더라고 생각한다. 여기에는 사용자 인터페이스와 커널 로더 같은 디스크를 위시한 부분들을 포함하고 있다. 이러한 사용자 인터페이스들은 간단한 명령행부터 GUI 까지 다양하다.

부트 로더는 두 가지 방식(주 부트 로더 또는 제 2의 부트 로더) 중 하나로 설정된다. 주 부트 로더는 부트 로더의 첫 번째 단계가 MBR에 설치되는 장소이다. 제 2의 부트 로더는 부트 로더의 첫 단계가 부팅 가능한 파티션에 설치되는 장소이다. 개별 부트 로더들이 이때 MBR에 설치되고, 컨트롤을 제 2의 부트 로더에 전달하도록 설정된다.

친구가 config.mak 파일이 뭐냐는 질문을 해왔다 ...
난감... 뭐지?;;

검색해본 결과 ,
configure 명령으로 컴파일 옵션을 설정해주었을 때
명령이 성공하면 생성되어지는 파일이라고 한다.

파일을 열어보면 어떤 컴파일러와 툴을 사용하는지에 대한 정보가
기록되어 있다.

이노무 기억력..

분명 예전에 삽질하면서 본 파일같은데

아직 건드려보진 않았지만

작년처럼 모르고 막 수정해버리는 실수따윈 하지 않을거다

올해는 앎의 중요성을 인지해야 한다 ㅎㅎ


뽀나스~

* ar: 정적 라이브러리들을 만든다.
* objdump: 가장 중요한 바이너리 툴; 바이너리 형식 오브젝트
파일의 모든 정보를 보여준다.
* strings: 바이너리 파일의 출력가능한 모든 문자열들을 보여준다.
* nm: 오브젝트 파일의 심볼 테이블에 정의된 심볼들의 리스트를 보여준다.
* ldd: 오브젝트 바이너리 파일이 의존하고 있는 공유 라이브러리들의
목록을 보여준다.
* strip: 심볼 테이블 정보를 지운다.

시그널
동기적 시그널 : 프로세스의 어느 정해진 동작과 관련되어 있어서 그 동작을 하는 동안 전송되게 된다.(단, 프로세스의 시그널이 Mask되지 않을 때) ex) 메모리 확보 예외, 잘못된 명령 실행 등
비동기적 시그널 : 실행되는 프로세스의 제어 밖에 있는 외부 사건에 의해 발생한 시그널
예측할 수 없는 시간에 도착하며 Mask되지 않은 어떤 다른 프로세스에 적용되도록 요청한다.
ex) Ctrl + C, Ctrl + Z, Kill 커맨드에 의한 시그널 전송

시그널 마스크 란?
시그널을 보내면 안되는 경우, 마스크를 하게되면 그 동안에는 시그널이 보류되고, 마스크가 해제되면 전달되게 된다. 중복된 시그널이 도착하면 모두 삭제되고 하나만 남아있게 된다.

시그널 수신 시 동작의 변경이 자유로우나 SIGKILL, SIGSTOP은 예외이다.

시그널 수신 시 5가지 동작
종료 : 프로세스 종료
코어 덤프 : 프로세스의 코어 덤프 파일을 작성하고 종료(코어 덤프 파일은 프로그램 비정상 종료시 메모리 상황을 기록한 파일로 어디서 오류가 났는지 알 수 있음, 디버깅 모드로 컴파일하면 좀 더 자세한 정보가 기록됨, 실행중인 프로세스에 시그널을 날려 강제로 파일을 생성할 수도 있다.)
무시 : 시그널 전송을 비롯하여 아무것도 하지 않음
정지 : 프로세스의 실행 (일시) 정지
계속 : (정지상태의) 프로세스의 실행 재시작


실시간 시그널
POSIX에서 시그널 처리가 가지는 단점을 보완하기 위해 규정한 사양
시그널이 큐에 보관되어 생성된 횟수만큼 전송됨
작은 시그널 번호부터 배송됨
시그널 번호뿐 아니라 시그널 번호, 에러번호, 시그널 코드, 시그널 번호에 해당한 보다 상세한 정보등을 전달해줌

시그널핸들러는 응용프로그램에서 사전에 설정해두어야 하며 시그널이 발생되면
시그널 생성, 마스크 검사, 전송, 복귀처리를 한다.
시그널 핸들러 설정 -> do_sigaction 함수의 sighand 구조체 설정
시그널은 프로세스 혹은 프로세스 그룹에 대해 생성
실시간 시그널이 아니고 동일한 시그널이 생성되어 있을 경우엔 전송하지 않음
실제처리는 send_signal 함수가 수행
실시간 시그널일 경우 sigqueue 구조체를 확보해야 하는데 메모리가 부족하면 시그널이 생성되지 않을 수 있다. 하지만 sigaddset()의 비트 설정으로 끝나기 때문에 시그널은 생성된다.
그래서 SIGKILL이나 SIGSTOP이 송신될 수 있는 것이다.

시그널 마스크는 task_struct에 비트 설정/제거 로 수행
전송될 시그널이 있을 경우 TIF_SIGPENDING 플래그 설정

시그널 핸들러 종료 시 스택 상에 쌓인 주소로 처리 이동

i found out that has some problem
but i dont no what it is
hu~ 

+ Recent posts