본문 바로가기

분류 전체보기

[C언어] 1614. Maximum Nesting Depth of the Parentheses https://leetcode.com/problems/maximum-nesting-depth-of-the-parentheses/ 알고리즘보다 C언어 이해도를 높이고자 문제를 풀어봤다. 포인터에 대한 이해가 필요할 듯 하다. 더보기
[64비트 멀티코어 OS 원리와 구조] 7장 - C언어로 코드를 작성하자 이번 장에서 해야 할 일 1. C소스 파일 추가 2. 1을 빌드하여 보호 모드 커널 이미지에 통합 실제로 하는 일은 C언어로 작성한 커널을 보호 모드 엔트리 포인트의 뒷부분에 연결하고 엔트리 포인트에서는 C 커널의 시작부분으로 이동하는 것이 전부 7.1 실행 가능한 C 코드 커널 생성 방법 - C코드는 컴파일과 링크 과정을 거쳐서 최종 결과물이 생성된다. - 컴파일 과정은 소스 파일을 중간 단계인 오브젝트 파일로 변환하는 과정으로 소스 파일을 해석하여 코드 영역과 데이터 영역으로 나누고, 이러한 메모리 영역에 대한 정보를 생성하는 단계다. - 링크 단계는 오브젝트 파일들의 정보를 취합하여 실행 파일에 통합하며, 필요한 라이브러리 등을 연결해주는 역할을 하는 단계. 엔트리 포인트가 C 코드를 실행하기 위한.. 더보기
[64비트 멀티코어 OS 원리와 구조] 6장 - 32비트 보호모드로 전환하자 6.1 세그먼트 디스크립터 생성 - 세그먼트 디스크립터란, 세그먼테이션 기법에서 세그먼트 (메모리 공간을 임의의 크기로 나눈 영역)의 정보를 나타내는 자료구조. - 리얼 모드의 세그먼트 레지스터라는 명칭이 보호 모드에서 세그먼트 셀렉터라는 이름으로 바뀜. 세그먼트 디스크립터 - 코드 세그먼트 디스크립터: 실행 가능한 코드가 포함된 세그먼트에 대한 정보. CS 세그먼트 셀렉터에 사용됨 - 데이터 세그먼트 디스크립터: 데이터가 포함된 세그먼트에 대한 정보. CS 세그먼트 셀렉터 제외 나머지 셀렉터에 사용 가능 - 우리 OS에서 필요한 세그먼트 ㄴ 커널 코드와 데이터용 세그먼트 디스크립터 각 1개 ㄴ 커널 코드와 데이터용 세그먼트 디스크립터는 0 ~ 4GB까지 모든 영역에 접근할 수 있어야 함 ㄴ 보호 모드용.. 더보기
[64비트 멀티코어 OS 원리와 구조] 5장 - 플로피 디스크에서 OS 이미지를 로딩하자 - BIOS 기능을 사용해서 플로피 디스크를 제어하자 - 가상 OS 이미지를 만들고 로딩한다 5.1 BIOS 서비스와 소프트웨어 인터럽트 - BIOS의 기능은 소프트웨어 인터럽트를 호출해서 사용한다. - 인터럽트 벡터 테이블은 메모리 어드레스 0에 존재한다. 테이블의 각 항목은 인덱스에 해당하는 인터럽트가 발생했을 때 처리하는 함수 어드레스가 저장되어 있으며, 4바이트다. - 인터럽트는 최대 256개까지 설정 가능하다. 그래서 리얼 모드의 인터럽트 벡터 크기는 최대 1024 바이트다. - BIOS는 레지스터 방식으로 파라미터와 결과값을 주고받는다. AX, BX, CX, DX 레지스터와 ES 세그먼트 레지스터를 사용해서 파라미터를 넘겨주며 결과값도 레지스터를 통해 넘겨 받는다. 디스크 구조 (3.5인치, .. 더보기
[64비트 멀티코어 OS 원리와 구조] 4장 - 내 PC를 부팅하자 4.1 부팅과 부트로더 - 부트로더는 OS의 나머지 코드를 메모리에 복사해 실행시킨다. 부트로더는 대부분 512바이트의 코드다. - 부팅은 PC가 켜지고 OS가 실행되기 전까지 수행되는 일련의 작업 과정이다. 프로세서 초기화, 메모리와 외부 디바이스 검사 및 초기화, 부트로더를 메모리에 복사하고 OS를 시작하는 과정등이 포함된다. - 부팅 과정에서 하드웨어 관련 작업은 BIOS가 담당하고, 여기서 하는 각종 테스트나 초기화를 POST라고 한다. - BIOS는 메인보드에 포함된 펌웨어의 일종으로, 보드에 롬이나 플래시 메모리 형태로 존재하고, 전원이 켜지면 프로세서가 가장 먼저 실행하는 코드다. - 여기서 가장 중요한 작업은 부트로더 이미지를 메모리로 복사하는 단계다. 이 단계는 우리가 BIOS에서 처음으.. 더보기
[64비트 멀티코어 OS 원리와 구조] 2장 - OS 개발 환경을 구축하자 나는 맥을 사용하기 때문에 환경설정은 이 책을 보고 따라하기 힘들었음 (책은 윈도우 기반) 그래서 아래 내용도 맥 기준으로 다시 작성하였습니다. 1. GCC 설치 - GCC는 GNU Compiler Collection. 무료로 사용할 수 있는 컴파일러 관련 프로그램의 집합. (공식 사이트: https://gcc.gnu.org/) - mac os는 리눅스 계열이므로 gcc가 설치되어 있을 수 있음. - 확인은 c 확장자 파일을 생성해서, c언어를 이용해서 아무 코드나 작성해 놓고, 아래 명령어로 컴파일이 되는지 확인하면 된다. gcc -m32 -o test32 test.c gcc -m64 -o test64 test.c gcc - 컴파일 명령어 -m32 옵션: 32비트용 코드를 생성(참고: https://g.. 더보기
[64비트 멀티코어 OS 원리와 구조] 1장 - OS 개발을 위한 힘찬 첫걸음 실습 과정을 다른 카테고리에도 작성했지만, 이 카테고리에서는 책을 더 천천히 살펴보고 이론/실습 섹션으로 나눠서 내 나름대로 정리를 해보려고 한다. (책만 배끼는 수준이 아닌) 현재 나는 64비트 멀티코어 OS 원리와 구조 1권의 10장까지 구현한 상태이다. 나는 맥 환경에서 작업하고, 책은 윈도우에서 작업 + 11년 전 상황의 조합이라 몇몇개는 잘 동작하지 않는 부분이 있었는데, 이 부분에서 내가 삽질하면서 찾은 내용까지 기록하려고 한다. 1장의 책 내용은 따로 정리할 건 없고, OS 개발을 시작하는 독자에게 저자가 용기를 주는 세션이다. OS 개발하는 과정에서 얻을 수 있는 세 가지 1. 하드웨어와 소프트웨어를 모두 다뤄볼 수 있다. 2. OS의 기능을 실제로 구현하면서 문제 해결 능력을 기를 수 있.. 더보기
[LeetCode] 416. Partition Equal Subset Sum https://leetcode.com/problems/partition-equal-subset-sum/ Partition Equal Subset Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 못풀었다. 참고: https://withhamit.tistory.com/482 [leetcode][416] Partition Equal Subset Sum 문제 : leetcode.com/problems/partition-equal-subset-sum/ 양의 정수.. 더보기
[OS개발] 10. 64비트 모드로 전환하자 지금 다 책대로 했는데 아래 오류가 남 디스크 이미지를 못불러 온다는데, 위에 bin 파일까지 모두 정상적으로 빌드는 완료 되었다. imagemaker.c 파일이 문제인 것 같은데.. 근데 신기하게 c 파일을 계속 수정해도 똑같은 에러가 발생한다. 심지어 에러 메시지도 수정했는데 뭔가 makefile은 캐시같은걸 남기나 해서 검색중.. 그게 아니라 이전 챕터에서 내가 utility 파일 하위에 makefile을 만들지 않아서 그랬음.. 빌드할때 꼬였음 이제 빌드는 모두 성공하는데 무한 재부팅이 된다... 비슷한 문제 질문 https://stackoverflow.com/questions/69573387/switch-to-32-bit-protected-mode-causes-qemu-to-restart-in-.. 더보기
[OS개발] 6. C언어로 커널 작성하기 - 작성중 섹션 배치와 크기 정렬을 위해 수정한 링커 스크립트가 있는데, 이 책 자체가 윈도우를 기준으로 설명하고 있어서 맥 사용자인 나와는 좀 다르다. 일단 맥에서는 32비트용 링커 스크립트가 어디에 저장되어있는지 확인해보자. 명령어 오류 gcc -melf_i386 -T elf_i386.x -nostdlib Main.o -o Main.elf 위 명령어가 오류가 난다. 확인중 오류 메시지: unknown argument: '-melf_i386' gcc -m32 -T elf_i386.x -nostdlib Main.o -o Main.elf 이 명령어로 대체할 수 있다. 책에서는 똑같은 설명인데 옵션을 앞에서는 -m32로 주고 뒤에서는 -melf_i386으로 주었다. 그다음오류 ld: unknown option: -T .. 더보기