본문 바로가기

프로그래밍/OS12

CentOS 7 서비스 관리 CentOS 7 부터 서비스 데몬 관리 방법이 달라졌습니다. 기존의 init system 에서 systemd 로 기본 시스템 관리 데몬이 변경되었기 때문입니다. 1. 서비스 재실행(sshd 의 경우) systemctl restart sshd.service 2. 서비스 중지(sshd 의 경우) systemctl stop sshd.service 3. 서비스 시작(sshd 의 경우) systemctl start sshd.service 4. 서비스 상태보기(sshd 의 경우) systemctl status sshd.service 5. 부팅시 서비스 시작하기(sshd 의 경우) systemctl enable sshd.service 6. 부팅시 서비스 시작하지 않음(sshd 의 경우) systemctl disabl.. 2015. 4. 22.
CentOS mongodb 2.6.1 업데이트하기 예전에 yum 을 통한 패키지 설치 방법을 포스팅한 적이 있습니다. 2011/11/17 - [프로그래밍/서버관리] - CentOS 에서 MongoDB 패키지 설치하기 금일 별 생각없이 yum update 를 실행하였더니, mongodb 의 업데이트가 진행되었습니다. 헌데, 아래와 같은 에러가 발생하더군요. 패키지 충돌 오류인 것 같아... 관련 내용을 구글링해보니, 크게 두 가지 방법이 있더군요. 1. 기존의 패키지를 삭제하고 설치한다. yum erase mongo-10gen mongo-10gen-serveryum install mongodb-org 2. 캐쉬를 생성하고 설치한다.yum makecacheyum install mongodb-org 헌데, 두 가지 방법 모두 문제 해결이 되지 않았습니다. 그.. 2014. 5. 8.
FPC 로 OS 커널 만들기... - 3 - 다른분들처럼 저 또한 세월호 참사로 인해 대부분 작업이 중지된 상황입니다. 지금 시점에서 무언가 집중해서 한다는 것이 많이 힘드네요. 부디 삼가 고인의 명복을 빌며... 일단, 지난 커널 작업에서 조금 개선되거나 수정된 내용이 있어 정리해봅니다. 먼저, GRUB 이랑 연동하는 부분인데... 부팅이 완료된 후의 시스템 상태는 다음과 같습니다. CS : 코드 세그먼트 디스크립터를 가리킴. Base Address 0, Limit 4G - 1DS, SS, ES, FS, GS : 데이터 세그먼트 디스크립터를 가리킴. Base Address 0, Limit 4 G - 1A20 : 활성화 됨.Paging : 사용안함.인터럽트 : 중지.IDT : 등록되지 않음.GDT : 크기 및 위치, 셀렉터의 값이 정해지지 않음.(.. 2014. 4. 30.
A20 게이트 포트 I/O(2014/04/18 - [프로그래밍/OS] - 포트 I/O)에 이어 A20 게이트 또한 인텔 프로세스의 특징입니다. 사실, 지저분한 유산이지요. 인텔의 8086 CPU 핀을 보시면, A0 부터 A19 까지 어드레스(주소) 핀이 존재합니다. 즉, 20비트 주소 체계를 가지고 있다는 얘기입니다. 2진수 11111111111111111111 => 2^20 = 1048576 즉, 1048576 번지까지 주소 지정이 가능하며, 이를 KB 로 환산하면 1024KB 즉 1MB 가 됩니다. 하지만, 다들 아다시피 8086, 8088, 80286 은 16비트 CPU 입니다. 레지스터에 담을 수 있는 것은 16비트이며 이 레지스터를 통하여 주소 접근을 하여야합니다. 4 비트가 모자란 셈이죠. 그래서 나온 개념.. 2014. 4. 20.
포트 I/O 포트 I/O 에 대한 내용이 자세하지 않아 여기저기 자료를 찾아보았습니다. 아래는 시스템 버스(어드레스 버스, 컨트롤 버스, 데이터 버스) 를 나타낸 그림입니다. 보시면 아시겠지만 I/O 어드레스가 별도 존재합니다. 입출력 장치의 컨트롤러는 시스템 버스와 연결되는데 이때 메모리 영역처럼 고유한 주소를 가지게되며 이를 I/O 어드레스라 부릅니다.(메모리 어드레스와 구분해야합니다.) 예를 들어 Port I/O 에서 0x60, 0x64 번지의 경우 키보드와 관련되지만... 메모리(램) 에서 해당 번지는 전혀 다른 공간에 위치하고 있습니다. 이와 같이 분리된 형태를 Port I/O 라고 부르며 인텔 프로세서들이 주로 사용하는 방식입니다. 반면, 메모리의 특정 공간에 I/O 주소를 매핑하여 사용하는 방식(I/O .. 2014. 4. 18.
x86 CPU 메모리맵 참고http://wiki.osdev.org/Memory_Map_(x86) Low Memory(1MB 미만) 아래의 설명 중 사용할 수 없다는 뜻은 코드를 배치하거나 임의의 데이터를 배치하는 등의 용도로 사용할 수 없다는 뜻입니다. 0x00000000 부터 0x0009FFFF 까지의 640KB 는 Conventional Memory 라고 불립니다. 앞 부분의 0x00000000 부터 0x000003FF 까지의 1 KB 의 영역에는 IVT 가 존재하며, 0x00000400 부터 0x000004FFh 까지의 256 바이트는 BDA 로서 사용할 수 없습니다.(리얼모드에서 IRQ가 활성화된 경우, BDA 영역의 일부 값들을 overwrite 하기 때문. 하지만 보호 모드로 넘어간 후~ IVT 와 BDA 영역을 지.. 2014. 4. 17.
FPC 로 OS 커널 만들기... - 2 - 오늘 포스팅은 작업 일지에 가까울 거 같습니다. 아무래도 제게 주어진 시간이 많지 않은 관계로 최대한 빨리 작업을 진행하고 있거든요. 말 그대로 닥치는대로 하고있습니다. ^^ 정석대로라면 부트로더를 통해 보호 모드로 진입하고 이후, 인터럽트, 디바이스, 태스크 스위칭, 페이징 등 거의 정해진 절차처럼 커널 개발을 하게 됩니다. 수많은 OS 개발자들이 해왔던 일이고 저도 그 중 한명이 되는 겁니다. 하지만 기왕지사 조금 무리를 하며 일을 진행하는 것인만큼 뭔가 의미가 있어야하지 않을까란 생각이 들었습니다. 즉, 이 일을 해야하는 이유 혹은 가치를 정할 필요가 생겼습니다.(코딩을 하며 멀티 태스킹으로 고민했습니다. ㅋㅋ) 유산의 발굴 2년전 파스칼과 관련한 글을 포스팅한 적이 있습니다. 2012/09/07 .. 2014. 4. 11.
FPC 로 OS 커널 만들기... - 1 - 예전부터 파스칼 OS 제작을 꿈꿔오고 있었는데요. 현실적인 제약 때문에 그냥 은퇴하면 해야겠거니...하고 생각했습니다. 그러다 최근 시간적 여유가 생겨 미뤘던 작업을 하나 둘 해보고 있습니다.(얼마나 갈런지요? ㅠㅠ 먹고 살아야하니...) 일단, Intel 계열 CPU 의 경우~ 처음 부팅시 리얼 모드에서 동작하다 보호 모드로 전환하는 과정을 거쳐야하는데... 리얼 모드는 16비트 기계어로 동작합니다. 따라서 부팅의 시작을 담당하는 부트로더의 경우, 16비트 기계어 코드가 필요한 것이죠. 약간의 결벽증이 있던 저는 2006년경 TP(Turbo Pascal)로 관련 작업을 해보았습니다. 2012/04/09 - [프로그래밍/OS] - 파스칼로 만든 부트로더... - 1 - 당시에는 TP 와 델파이로만 OS .. 2014. 4. 9.
CodeTyphon 으로 FPC 크로스 컴파일러 생성하기... 수동으로 크로스 컴파일러를 생성하는 방법은 2014/04/04 - [프로그래밍/OS] - FPC 64비트(x86_64) 리눅스에서 32비트(i386) 크로스 컴파일러 생성하기... 를 참고해 주세요. 먼저, CodeTyphon 을 다운로드합니다. http://www.pilotlogic.com/sitejoom/index.php/downloads/finish/30-codetyphon/123-codetyphonins-zip 윈도우, 리눅스 모두 상기 파일을 다운로드하면 됩니다. 아울러 Vista 이후 윈도우의 경우 관리자 권한을 사용하여 설치 과정을 진행하면 되겠습니다. 다운로드한 압축파일을 적당한 곳에 해제한 후, install.bat 를 실행합니다. 아참 아래 스샷에서처럼 CodeTyphon 이라는 디렉토.. 2014. 4. 8.
FPC 64비트(x86_64) 리눅스에서 32비트(i386) 크로스 컴파일러 생성하기... CentOS 에서 라자루스를 설치하였다면, /usr/share/fpcsrc/2.6.2 와 같은 디렉토리에 fpc 의 소스가 설치되어있을 겁니다. 해당 디렉토리 아래 compile 디렉토리로 이동한 후, 아래의 명령어를 입력합니다. cd /usr/share/fpcsrc/2.6.2/compiler make cycle CPU_TARGET="i386" 어차피 리눅스에서 실행하고 32비트 리눅스 컴파일러이기 때문에 OS_TARGET 은 생략하였습니다. 끝에 오류 메시지가 나오는데, compile 디렉토리에 ppcross386 이 무사히 생성되어있길래 그냥 무시하였습니다.(ㅡㅡㅋ) 심볼링 링크를 생성해줍니다. ln -s /usr/share/fpcsrc/2.6.2/compiler/ppcross386 /usr/bin .. 2014. 4. 4.
GRUB Legacy 를 이용한 부팅가능한 CD 이미지 만들기 GRUB 2 와 달리 기존의 GRUB 1 의 경우 GRUB Legacy 로 칭합니다. 먼저, CentOS 에서 관련 패키지들을 설치합니다. 저 같은 경우에는 그냥 설치되어있더군요. yum install genisoimage grub 작업 디렉토리(여기서는 isofiles)를 생성한 후, boot/grub 디렉토리도 생성합니다. mkdir -p isofiles/boot/grub 생성한 grub 디렉토리에 기설치된 grub 패키지의 El Torito 파일들을 복사합니다. 참고로 El Torito 는 CD-ROM 부팅 관련 표준으로 이해하면 되겠습니다.(64비트 CentOS 인 관계로 경로가 x86_64-redhat 이 붙습니다.) cp /usr/share/grub/x86_64-redhat/stage2_elt.. 2014. 4. 3.
파스칼로 만든 부트로더... - 1 - 2006년경 OS 제작에 한창 관심을 가지고 있던 무렵, Turbo Pascal 과 Delphi 로 모든 걸 제작해보고자 마음 먹고 이리저리 머리를 굴린 결과~ TP 로 부트로더를 만드는데 성공했다. ### delphi { 000h~3FFh : Interrupt Vector Table 400h~4FFh : BIOS 500h~5FFh : DOS Parameters 1000h~7BFFh : unusable 7C00h~7DFFh : Boot Sector 7E00h~8FFFh : FAT Table 9000h~ABFFh : Directory Entry Table 10000h~1FFFFh : Stack 64 KBytes 20000h~2FFFFh : Boot Loader 64 KBytes 30000h~9FFFFh :.. 2012. 4. 9.