본문 바로가기
  • _^**_

무근본 IT 지식 공유/무근본 운영체제(OS)20

Windows Powershell 에서 curl 명령 사용시 유의할점!! 윈도우 PowerShell에서 `curl` 명령어를 사용할 때, 몇 가지 중요한 차이점이 있습니다. 기본적으로, PowerShell에서 `curl`은 실제로 `curl` 명령어 자체가 아닌 `Invoke-WebRequest`라는 PowerShell cmdlet의 별칭으로 매핑되어 있습니다. 이로 인해 Linux에서 `curl`로 사용되는 옵션과 매개변수가 PowerShell에서 직접적으로 동일하게 작동하지 않을 수 있습니다. 예를 들어, `-k` 옵션은 `curl`에서 SSL 인증서 검증을 비활성화하는 데 사용되지만, PowerShell의 `Invoke-WebRequest`에서는 `-SkipCertificateCheck` 매개변수를 사용하여 같은 기능을 수행합니다. `-F` 옵션은 `curl`에서 멀티파.. 2024. 3. 20.
리눅스쉘 / ls명령 시 조회되는 폴더별 ls 결과의 라인 수를 각각 출력하는 방법(예시) Work1, work2, work3 ... 폴더별 ls 결과의 라인 수를 각각 출력하는 방법 ? 특정 폴더(`Work1`, `Work2`, `Work3`, 등) 내부의 `ls` 명령어 결과의 라인 수를 출력하고 싶다면, Bash 쉘 스크립트에서 반복문과 파이프라인을 사용할 수 있습니다. 아래의 스크립트는 각 `Work` 폴더에 대해 `ls` 명령어의 출력 라인 수를 계산하고 출력합니다. #!/bin/bash for folder in Work1 Work2 Work3; do if [ -d "$folder" ]; then # 폴더가 존재하는지 확인 count=$(ls -1 "$folder" | wc -l) # 폴더 내 항목 수 계산 echo "$folder has $count items" else echo ".. 2023. 11. 23.
[TCP] NETSTAT명령어 사용 시 CLOSE_WAIT 상태란? `CLOSE_WAIT` 상태는 Linux의 `netstat` 명령어를 사용할 때 볼 수 있는 TCP 네트워크 상태 중 하나입니다. 이 상태는 TCP 연결이 종료되는 과정에서 나타나며, 특히 다음과 같은 상황을 나타냅니다: `CLOSE_WAIT` 상태는 종종 시스템이 여전히 자원을 보유하고 있음을 나타냅니다. 만약 이 상태가 과도하게 오래 지속되면, 이는 일반적으로 응용 프로그램의 버그나 부적절한 관리로 인해 발생하는 문제일 수 있습니다. 결론적으로, `CLOSE_WAIT` 상태는 정상적인 TCP 연결 종료 과정의 일부이지만, 이 상태가 지속적으로 유지되면 네트워크 자원이 낭비되거나 시스템 성능에 영향을 줄 수 있습니다. 이러한 상황에서는 응용 프로그램의 로그를 확인하거나 네트워크 관리 도구를 사용하여 문.. 2023. 11. 22.
리눅스 Curl https 인증서 오류 무시 옵션 `curl` 명령어를 사용할 때 HTTPS 인증서 검증을 무시하려면 `-k` 또는 `--insecure` 옵션을 사용합니다. 예를 들면: curl -k https://example.com 이 명령은 `curl`이 서버의 SSL 인증서의 유효성을 검사하지 않고 연결을 수행하게 합니다. 이는 테스트 목적으로 유용하지만, 보안상의 이유로 실제 운영 환경에서는 권장되지 않습니다. 2023. 11. 21.
[무근본운영체제] OS에서 시스템 API란 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스를 제공합니다. 사용자나 응용 프로그램이 하드웨어와 직접 통신하는 것은 복잡하고 위험할 수 있기 때문에, 커널을 통해 이를 간단하게 만드는 '시스템 API'가 필요합니다. 1. 시스템 API의 정의 시스템 API는 Application Programming Interface의 약자로, 응용 프로그램이 운영체제와 통신할 수 있도록 도와주는 일련의 루틴, 프로토콜, 도구들을 의미합니다. 이를 통해 프로그래머는 하드웨어와 직접적인 통신을 하지 않아도 원하는 기능을 구현할 수 있습니다. 2. 시스템 API의 중요성 1. 추상화 API는 하드웨어나 다른 소프트웨어의 내부 구조나 작동 원리를 숨기면서 필요한 기능만을 제공합니다. 이러한 추상화는 .. 2023. 9. 19.
[무근본 OS 만들기] CPU 세그먼트 레지스터에 대해 http://cotkdrl1.blog.me/10148671907 내가 써놨던 글. 참조하고 1. 별다른 처리 없이 메모리에 접근하면 암묵적으로 DS 세그먼트 레지스터가 사용된다. => 예를 들어.. 이 예시를 보면 알 수 있을 거다.. 무슨 말인지.. 2. 그런데 운영체제를 만드는 과정에서.. 바이오스가 부트로더를 0x07C0 번지로 갖다 놓으므로 DS와 CS는 0x07C0으로 초기화를 하는 게 좋다. => 부트로더의 코드(Code Segment)와 데이터(Data Segment)는 0x7C00부터 512바이트 범위에 존재하므로. 따라서 초기화를 해주는데, DS는 mov 명령어로 초기화 해주면 되고, CS는 mov 명령으로 초기화 할 수 없음에 주의한다. CS는 jmp 명령어를 사용하여 초기화 한다. j.. 2023. 3. 26.
[무근본 OS 만들기] 보호모드. GDT, 세그먼트 디스크립터 ※ 전에 정리해놓은 보호모드에 대한 내용 : http://cotkdrl1.blog.me/10152722953 그냥 읽는 걸로는 지루해서 못해먹겠다. 그래서 단순하게 책 내용을 정리하였다. 심심하니까 숫자놀이까지 해가며 ㅋㅋ ■ 세그먼트 디스크립터 - 세그먼테이션 기법(메모리 관리 기법)에서 세그먼트의 정보를 나타내는 자료구조 - 세그먼트란 메모리 공간을 임의의 크기로 나눈 영역을 의미 - 세그먼트를 복잡하게 구성할수록 세그먼트 디스크립터의 수도 증가 => 코드 세그먼트 디스크립터와 데이터 세그먼트 디스크립터로 나뉨 ① 코드 세그먼트 디스크립터 - 실행 가능한 코드가 포함된 세그먼트에 대한 정보를 나타냄 - CS 세그먼트 셀렉터에 사용 됌 ② 데이터 세그먼트 디스크립터 - 데이터가 포함된 세그먼트에 대한 .. 2023. 3. 26.
[무근본 OS 만들기] 보호모드에서의 세그먼테이션, 페이징(Intel 메뉴얼 해석) * 참고 : http://blog.naver.com/PostView.nhn?blogId=jeix2&logNo=80007589533&viewDate=&currentPage=1&listtype=0 => 유용한 그림이 많은 듯. 나중에 다시 보자. * 출처 : 인텔 메뉴얼 "VOLUME 3A: System Programming Guide Part 1"의 "3.4.5. System Descriptors" 참고 인텔 메뉴얼을 그대로 해석해보았다. 미숙한 영어실력이지만 궁금해서.. 3.2 세그먼트의 사용( Using Segments ) IA-32 아키텍쳐에 의해 제공되는 세그먼테이션 메커니즘은 매우 광범위한 시스템 디자인을 수행하는데 사용될 수 있다. 디자인에는 프로그램을 보호하기 위해 단지 작은 세그먼테이션의 사.. 2023. 3. 26.
[무근본 OS 만들기] 현재까지의 과정(부트로더-> 커널 엔트리 포인트-> C언어. Kernel32) ▶ 현재 디렉토리 구성 1. 부트로더(00. BootLoader) ▶ 디렉토리 구성 1-1. BootLoader.asm - .text 섹션. - BIOS가 부트로더를 찾아 0x7C00 번지에 올려줌. - 코드 세그먼트, 데이터 세그먼트를 0x07C0 으로 초기화. - 스택을 0x0000:0000~0x0000:FFFF 영역에 64KB 크기로 생성 - 부트 로더를 제외한 MINT64 OS 이미지 크기의 섹터를 정의한다. - BIOS 인터럽트 콜을 사용해 디스크에서 OS 이미지를 로딩한다. + http://cotkdrl1.blog.me/10148806030 참조. 0 번 트랙, 0번 헤드, 2번 섹터에서부터 시작하여 이후에 존재하는 모든 데이터를 메모리로 읽어온다. 메모리에 올리는.. 그 위치는 0x10000.. 2023. 3. 26.
[무근본 운영체제(OS) 공부] 실행파일이 메모리에 올라갔을 때의 그림 PE 파일 포맷에 대하여.... http://blog.naver.com/PostView.nhn?blogId=mystyle1057&logNo=110147181741&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 참조 2023. 3. 26.
[무근본 OS 만들기] 현재까지의 과정 ② (부트로더-> 커널 엔트리 포인트-> C언어. Kernel32) 2. 커널(01. Kernel32) ▶ 디렉터리 구성 일주일 전에 정리하던 내용을 다시 정리하겠다. 0x10000 번지 부터 512 바이트의 공간을 차지하는 EntryPoint.bin 에서 0x10200 번지 부터 존재하는 Kernel32.bin으로 넘어와야 할 차례다. Kernel32.bin은 본격적인 C언어 커널부분이다. 그럼 Kernel32.bin은 어떻게 구성되는가? 를 정리해보고자 한다. ① C 코드를 넣는다? - C 코드는 어셈블리어 코드와 달리 컴파일과 링크 과정을 거쳐서 최종 결과물이 생성됨 * 컴파일 - 소스 파일을 중간 단계인 오브젝트 파일로 변환하는 과정으로 소스 파일을 해석하여 코드 영역과 데이터 영역으로 나누고, 이러한 메모리 영역에 대한 정보를 생성하는 단계 * 링크 - 링크 단.. 2023. 3. 26.
가상메모리에 대한 그림 2013. 1. 30.
GDT / LDT 그림 2013. 1. 30.
cr0 레지스터, 컨트롤 레지스터 CR0 레지스터 : 프로세서의 상태와 동작모드를 제어하는 여러가지 제어 flag를 가지고 있다. 대표적인 flag로는 PG (Paging. paging 사용여부 설정), PE (Protection Enable, 보호모드를 사용하는지 여부)가 있다. cf. CR1 : reserved CR2 : page fault가 발생하였을 때 이것이 발생한 linear address를 가지고 있다. CR3 : page directory가 시작하는 physical address를 가지고 있다. CR4 : 아키텍쳐별로 확장한 여러가지 flag들을 가지고 있다. 2013. 1. 30.
[OS 만들기] makefile 에러 http://nicklib.com/library/make/Make-8.html 2013. 1. 8.
[OS 만들기] 컴파일 과정 * toolchain 이란? http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=67848150&qb=dG9vbGNoYWlu&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RMqhBU5Y7vossviC5yGssssssus-465529&sid=UOqYjXJvLDoAADZkGZ4 * 크로스 컴파일이란? http://cafe.naver.com/es2g/122 * 컴파일러, 빌드, 링커, 목적 파일 http://msbang.co.kr/80141235236 * gcc 명령어, 옵션 http://blog.naver.com/ekdzhd18?Redirect=Log&logNo=150016338995 ★ gcc 컴파.. 2013. 1. 7.
[OS 만들기] 부트로더에서 글자 출력 새로 알게 된 사실은 DS 레지스터에 주소 값(0xB800)을 설정하면, 이후 데이터에 접근하는 명령어는 물리 주소 그 값(0xB800)을 기준으로 한다는 것 2013. 1. 1.
[OS 만들기] 이클립스 + QEMU 연결설정 Run-> External -> External tools configuration 2013. 1. 1.
[OS 만들기] 이번학기 OS 만들기 발표자료. 얼마 안되는 내용이지만 많은 도움이 되었다. 지금 공부하는 책의 앞부분이다. 글꼴은 '헤움 못난이 ' 2012. 12. 30.
[OS 만들기] 내 블로그. cotkdrl1.blog.me => 여기에다가 학기 중에 만든 OS 과정을 적어봤는데, ( 부트로더에서 커널로 넘어가 보호모드까지 넘어갔는데 C언어로의 전환 실패. ) 이곳으로 옮김~ 2012. 12. 30.