Presentation is loading. Please wait.

Presentation is loading. Please wait.

안드로이드 스터디 => 언어만 잘 알면 어플리케이션을 만들 수 있을 것이다!

Similar presentations


Presentation on theme: "안드로이드 스터디 => 언어만 잘 알면 어플리케이션을 만들 수 있을 것이다!"— Presentation transcript:

1 안드로이드 스터디 => 언어만 잘 알면 어플리케이션을 만들 수 있을 것이다!
• 당시목표 : 참신한 아이디어가 담긴 어플리케이션을 하나 만들자! => 언어만 잘 알면 어플리케이션을 만들 수 있을 것이다!

2 과정 JAVA + xml

3 과정 Database , FTP 서버

4 과정 웹 프로그래밍 언어 => php, asp

5 과정 Eclipse

6 운영체제 만들기의 목표 => 여러가지 툴 사용법을 익히고, 언어와 컴퓨터 구조 등을 제대로! 이해하는 것
만드는 것 자체에 목적을 두는 것 보다는, 이 과정을 통해서 얻어갈 수 있는 실전지식을 최대한 쌓아가자! => 여러가지 툴 사용법을 익히고, 언어와 컴퓨터 구조 등을 제대로! 이해하는 것

7 운영체제 만들기에 앞서 ▶ 준비물 • NASM – 어셈블러(어셈블리어 -> 기계어)
• Visual Studio 2010 Express • QEMU – 가상머신 • EditPlus – 어셈블리어 작성을 위한 툴 * 학습 방법 : 책과 블로그 참조

8 컴퓨터의 부팅과정 ① 컴퓨터의 전원버튼을 누른다. ② BIOS가 실행된다.
검사한다. => POST(Power On Self Test) ④ POST가 무사히 끝나면 부팅이 시작된다. - 순서대로 각 이동장치에서 첫 번째 섹터를 뒤진다. - 부트로더가 발견이 되면 BIOS는 이 부트로더를 메모리 0x7C00번지에 로드한다. 그리고 0x7C00 번지로 점프한다.

9 부트로더의 조건 첫 번째 섹터에 있는 내용물이 부트로더인지 어떻게 구분할까? ① 크기가 512byte 여야 한다.
② 511번째 바이트에는 55, 512번째 바이트에는 AA 문자가 저장 돼 있다.

10 부트로더 만들기 다른 가능한 방법도 있겠지만, 어셈블리어로 도전! • boot.asm

11 부트로더 만들기 • nasm 으로 컴파일하여 가상 이미지 파일로 만들었다.
=> * 컴파일 : 어셈블리어 -> 기계어

12 부트로더 만들기 • 가상 이미지를 qemu로 실행 • 실행 결과 -L . => 바이오스 파일을 불러오는 명령어
-hda=> 뒤에 경로를 0번 하드디스크로 사용하겠다는 의미 • 실행 결과

13 부트로더 만들기 • 수정하고 실행해 볼 때마다 일일이 명령어를 치기 불편하므로 배치파일(make.bat)을 생성.

14 부트로더에서 글자 출력 글자를 출력하려면 비디오 메모리라는 것을 사용

15 세그먼트-오프셋 방식 • 16비트 CPU시절 메모리 주소 방식 16비트는 16진수 네 자리 이므로,
0x0000~0xFFFF 까지 사용 => 메모리 총 64kb(2의 16승)까 지 사용 가능 (직접 접근 방식)

16 세그먼트-오프셋 방식 • 인텔은 새로운 CPU를 1MB까지 인식 가능하도록 설계 함
1메가 바이트면 주소를 표현하는데 20비트를 사용한다는 것 16비트 레지스터 두 개를 사용함

17 세그먼트-오프셋 방식 비디오 메모리인 0xB800:0000 은 결국 0xB8000 • 16비트 레지스터 두 개를 사용하는 방식
: 세그먼트 – 오프셋 방식 • 0x2000 : 0x0111 0x20000(세그먼트) => 한자리 수 올려서 더함 + 0x0111(오프셋) x20111 비디오 메모리인 0xB800:0000 은 결국 0xB8000

18 글자출력 - 레지스터? • es, ax, ah, al, ax?

19 레지스터?

20 레지스터?

21 레지스터?

22 레지스터?

23 글자출력

24 커널 • 커널의 필요성 부트섹터에는 512바이트 밖에 기록하지 못함
=> 이 작은 공간에 운영체제의 여러 기능을 추가할 수 없음. => 결국 다른 영역에 커널을 작성하여 이것을 부트섹터에서 불러오는 것으로 구성.

25 커널 • 시스템의 자원을 관리한다. • 모든 시스템이 원활하게 작동할 수 있도록 제어하는 소프트웨어다.
• 운영체제를 구성하고 있는 핵심으로써 DRAM에 상주하여 시스템 구동에 필요한 환경설정과 수행되는 프로그램을 스케줄링하는 소프트웨어다. • 커널의 기능에는 프로세서 관리, 메모리 관리, 파일시스템 관리, 네트워크 관리, 디바이스 관리가 있다.

26 커널로 넘어가기 ① 바이오스는 부트섹터를 읽어와서 메모리에 올려놓는다. ② 부트섹터에 존재하는 부트 코드는 커널을 로드한다.

27 커널로 넘어가기 - 하드디스크 읽기 • 부트 프로그램이 디스크의 일정부분(커널)을 메모리에 올리기 위해서는 디스크를 읽어야 한다. • 읽는 과정은 OS또는 BIOS에 의해 제공되는 인터럽트 바이오스 콜 13 이용 가능. • 결국 부트 로더에서는 간단히 이미지를 디스크에서 메모리로 로딩하는 역할만 한다.

28 커널로 넘어가기 – 하드디스크 읽기

29 커널로 넘어가기 – 하드디스크 읽기 • 인터럽트 바이오스 콜 13 중 읽기 명령인 2번 명령

30 커널로 넘어가기 – 하드디스크 읽기 • 커널소스

31 커널로 넘어가기 – 하드디스크 읽기 • 실행 : [부드로더 + 커널] => OS.img

32 CHS 방식 -> LBA 방식 • 섹터에 접근하기 위해서 필요한 정보 - 실린더, 헤드, 섹터 번호

33 실린더 6개 헤드 10개 섹터 8개 • 9번 섹터의 데이터를 읽으려 할 때
=> 섹터 번호 부분에 ‘9’라는 값을 넣어준다? => X 헤드의 값을 1 증가, 섹터의 값으로 1을 줌. 실린더 6개 헤드 10개 섹터 8개

34 CHS 방식 -> LBA 방식 • LBA 방식 ( Logical Block Addressing)
- 528MB밖에 인식하지 못하는 CHS 방식의 단점을 극복하고자 등장 - 1차원 배열처럼 섹터에 접근하 는 방식

35 16비트 리얼모드 -> 32비트 보호모드 16비트 리얼모드 컴퓨터를 처음 켜면 16비트 ‘리얼모드’로 부팅
80286 이후의 x86 호환 CPU의 운영 방식이다 컴퓨터를 처음 켜면 16비트 ‘리얼모드’로 부팅 32비트 보호모드로 변경시키는 것은 OS의 역할

36 16비트 리얼모드 -> 32비트 보호모드 16비트 리얼모드의 단점
16비트 리얼모드의 단점 ① Segment:Offset 주소 방식은 20비트이기 때문에 1MB 이상의 메모리영역에 접근할 수 없다. ② 메모리 접근에 대한 보호를 할 수 없다. 16비트 코드는 물리 메모리 주소에 직접 엑세스 한다. 이게 문제가 되는 이유는 응용프로그램이 실행될 때 메모리의 어딘가에 로드되는데, 실행 중 커널이 로드된 메모리를 갈아 엎을 위험이 있다. 따라서 커널이 죽을 수가 있다.

37 16비트 리얼모드 -> 32비트 보호모드 32비트 보호모드의 장점
① 4GB 메모리영역까지 접근이 가능하다. ( 2^32 = 4GB ) ② 메모리 접근에 대한 보호가 가능해진다. CPU에 의해 제공된다. 응용프로그램이 커널이 로드된 메모리를 갈아 엎으려 하면 CPU가 에러를 뿜어낸다. 커널이 그 에러를 적당히 처리해준다. (응용 프로그램을 끄는 등)

38 16비트 리얼모드 -> 32비트 보호모드 32비트 보호모드의 장점
③ 보호 모드는 시스템 소프트웨어가 다중작업, 가상 메모리, 페이징, 그리고 응용 소프트웨어를 넘는 운영 체제 제어 능력을 높이기 위해 고안된 운영 체제의 다른 기능들을 이용할 수 있게 도와준다.

39 16비트 리얼모드 -> 32비트 보호모드 GDT 란 - 여러 개의 세그먼트 디스크립터로 구성

40 16비트 리얼모드 -> 32비트 보호모드 GDT 란
GDT는 말 그대로 테이블. C언어의 구조체와 비슷. - GDT도 구조체와 마찬가지로 CPU에서 필요로 하 는 정보를 그 규칙에 따라 적어주기만 하면 된다. - GDT에는 다양한 정보가 포함. 메모리의 접근권한 이라던지, 접근방식이라던지.. 시작 위치라던지..

41 16비트 리얼모드 -> 32비트 보호모드 GDT 작성
1. GDT를 작성한다. 2. GDT를 등록한다 비트 모드 스위치를 켠다. CPU에서 필요로 하는 정보를 그 규칙에 따라 적어주기만 하면 된다.

42

43 스위치를 켜줌

44 커널 내에서 비디오 디스크립터를 사용해서 문자출력

45

46 C언어로 운영체제 만들기

47

48

49 동일한 컴퓨터라 할지라도 윈도우가 설치되어 있는 컴퓨터와 리눅스가 설치되어 있는 컴퓨터는 같은 애플리케이션이라도 컴파일된 결과물은 다르다.
리눅스 : … printf(“감사합니다. “); 윈도우 : …

50 Thanks, See You


Download ppt "안드로이드 스터디 => 언어만 잘 알면 어플리케이션을 만들 수 있을 것이다!"

Similar presentations


Ads by Google