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

무근본 IT 지식 공유137

(프로그래밍) Parameter와 Argument의 차이점이 있다고???-왕초보도 이해하는 프로그래밍 자, 오늘 우리가 함께 파헤쳐 볼 주제는 바로 프로그래밍에서의 ‘Parameter’와 ‘Argument’의 차이점입니다. 이 주제를 이해하기 위해 먼저 어느 가을 날, 우리의 향기로운 일상을 생각해봅시다. 당신이 좋아하는 카페에 들어가 커피를 주문하려고 합니다. 카페 앞에는 여러 메뉴판들이 있습니다. 그 메뉴판들이 바로 함수의 ‘Parameter’와 같습니다. 메뉴판은 당신에게 커피를 주문할 때 필요한 정보들을 제시하죠. 예를 들면, 아메리카노에는 몇 스푼의 설탕을 넣을 것인지, 우유는 얼마나 추가할 것인지 등의 정보를 미리 정의해 놓은 것입니다. 이제 당신이 카운터에 가서 실제로 주문을 합니다. “아메리카노에 설탕 두 스푼, 우유는 조금만 추가해주세요.” 바로 이 순간, 당신이 전달한 이 실제 값들, .. 2023. 9. 16.
‘Call by Value’와 ‘Call by Reference’에 대하여 -왕초보도 이해하는 자바 우리 오늘의 주제로 떠오른 ‘Call by Value’와 ‘Call by Reference’에 대하여 깊게 파헤쳐 보겠습니다. 이 두 가지 방법은 프로그래밍 세계에서 자주 마주치게 되는 개념입니다. 이야기의 깊은 물결에 몸을 맡기기 전, 먼저 간단한 예를 들어봅시다. 당신이 친구에게 꽃다발을 선물한다고 생각해 보세요. 이 꽃다발을 직접 주는 경우와, 꽃다발의 사진을 보내는 경우, 두 가지 상황을 상상해보시기 바랍니다. 첫 번째 상황이 ‘Call by Reference’와 유사하며, 두 번째 상황은 ‘Call by Value’와 닮아 있습니다. 자, 이제부터 저희의 여행이 시작됩니다. ‘Call by Value’는 값에 의한 호출 방식으로, 함수에 값을 넘겨줄 때 메모리상의 값을 복사하여 전달합니다. 따라.. 2023. 9. 16.
Git과 Github 차이점이 대체 뭐야?-왕초보도이해하는 프로그래밍 안녕하세요, 여러분. 오늘 저는 여러분께 Git과 GitHub의 차이에 대해 이야기를 나누려고 합니다. 두 주제는 자주 혼동되는데, 사실 그 둘은 꽤 다른 개념입니다. 자, 그럼 시작해보죠. 우리가 살아가는 세상에서는 많은 사물이 서로 밀접한 관계를 가지고 있죠. 예를 들면, 바다와 물고기, 하늘과 별, 그리고 우리의 주제인 Git과 GitHub도 마찬가지입니다. 그런데, 이 둘은 정말로 같은 것일까요? 그것이 아닙니다. Git과 GitHub는 서로 다른 개체이지만, 하나 없이 다른 하나는 그 존재의 의미를 잃게 됩니다. 먼저 Git에 대해 이야기해보죠. Git은 버전 관리 시스템(VCS)의 하나입니다. 소스 코드의 변경 사항을 추적하고 여러 사람들이 동시에 작업할 수 있게 해주는 도구죠. 이렇게 표현하.. 2023. 9. 16.
프로그래밍에서 추상화가 대체 뭐야?-왕초보도 이해하는 자바 프로그래밍에서 “추상화”라는 말씀을 들어보셨나요? 이는 복잡한 문제나 시스템을 단순하게 만드는 방법을 의미합니다. 프로그래머분들께서는 이런 추상화를 통해 핵심 기능에만 집중하실 수 있죠. 이것을 예를 들어 설명드리자면, 건축가가 건물을 설계할 때 각 층의 세부 사항은 생각하지 않고 전체적인 구조만을 그릴 때와 비슷한 원리입니다. 추상화는 프로그래밍에서도 여러 형태로 표현되곤 합니다. 함수나 메소드를 통해 특정 작업을 감추거나, 클래스와 객체로 데이터와 기능을 함께 묶는 것도 그 예시 중 하나입니다. 이렇게 만들어진 코드는 다시 사용하기도, 수정하기도 편리하답니다. 일상생활에서도 추상화의 예를 찾아볼 수 있습니다. 전기 스위치를 누를 때, 그 안의 복잡한 원리나 회로를 모르고도 사용할 수 있는 이유, 그것.. 2023. 9. 16.
오버로딩, 오버라이딩 차이가 대체 뭔데?-왕초보도 이해하는 자바 자, 여러분! 오늘 우리가 함께 다뤄볼 주제는 바로 프로그래밍에서 자주 마주치게 되는 두 가지 중요한 개념, '오버로딩'과 '오버라이딩'입니다. 이 두 개념, 들어보셨나요? 혹시 두 개념을 혼동하신 적 있으신가요? 그렇다면 지금부터 함께 천천히 그 차이를 파헤쳐 보겠습니다. 먼저, 오버로딩에 대해서 얘기해보죠. 오버로딩이란, 한 마디로 말해서 같은 이름의 함수나 메소드를 여러 개 만드는 것입니다. 그런데 이때 중요한 건, 그 안의 매개변수의 종류나 수가 다르다는 것이죠. “아, 그럼 같은 이름으로 다양한 일을 할 수 있겠네!”라고 생각하시는 분들, 바로 그렇습니다! 오버로딩의 핵심은 바로 ‘다양성’입니다. 마치 우리가 평소에 ‘읽다’라는 동사를 사용할 때 ‘책을 읽다’, ‘편지를 읽다’처럼 상황에 따라 .. 2023. 9. 16.
가비지 컬렉터가 대체 뭐야?-왕초보도 이해하는 프로그래밍 가비지 콜렉터에 대해 이야기를 시작하려 합니다. 너무나도 평범하게 쓰이는 용어지만, 무엇인지 자세히 알아본 적이 있는지요? 지금부터 그 세계를 함께 들여다보겠습니다. 본론에 들어가기 앞서, 컴퓨터 메모리라는 장소에 대해 생각해 보죠. 우리가 프로그램을 실행하면, 그 프로그램은 메모리에 데이터를 저장합니다. 그 데이터는 프로그램이 작동하는 동안 지속되죠. 그런데, 생각해 보면 필요 없어진 데이터도 분명히 있을 겁니다. 그렇다면 그 필요 없어진 데이터는 어떻게 되는 걸까요? 그래서 등장하는 게 바로 ‘가비지 콜렉터’입니다. 그 이름에서 느껴지는 것처럼, 필요 없어진 ‘가비지’ 즉, 쓰레기 데이터를 ‘콜렉트’하는 역할을 하는 것이죠. 정확히 말하면, 더 이상 사용되지 않는 메모리를 회수하여 다시 사용 가능한 .. 2023. 9. 16.
API란 뭘까요 ? -왕초보도 이해하는 프로그래밍 API, 그것은 무엇일까요? API는 'Application Programming Interface'의 약자로, 어플리케이션 프로그래밍 인터페이스라는 뜻이죠. 어렵게 들릴 수 있지만, 사실 이건 컴퓨터 세상에서 엄청 중요한 역할을 하는 친구랍니다. 먼저, 축약형으로 이야기한다면, API는 소프트웨어들 사이의 연결고리 같은 거라고 보면 돼요. 쉽게 말해, 한 프로그램이 다른 프로그램과 어떻게 소통하고, 정보를 주고 받을 것인지를 정의해놓은 일종의 규약이랍니다. 시간의 흐름 속에서, API는 그 중요성만큼 변천의 과정을 겪었죠. 과거에는 간단한 명령어들로 이루어진 소규모의 인터페이스였지만, 지금은 클라우드 서비스, 소셜 미디어, 다양한 디지털 서비스들이 서로 연결될 수 있게 해주는 거대한 구조로 발전했어요... 2023. 9. 16.
[무근본개발지식] TDD(Test Driven Development)가 대체 뭔데 !? - 쉽게 설명해드림 TDD (Test-Driven Development)는 소프트웨어 개발 방법론 중 하나로, 코드를 작성하기 전에 테스트를 먼저 작성하고, 이 테스트를 통과하는 코드를 작성하는 방식을 의미합니다. TDD의 주요 과정은 다음과 같습니다: 1. 실패하는 테스트 작성: 원하는 기능에 대한 테스트 케이스를 먼저 작성합니다. 이 시점에서는 테스트가 실패합니다. 2. 코드 작성: 테스트 케이스를 통과할 수 있는 최소한의 코드를 작성합니다. 3. 테스트 실행: 작성한 코드가 테스트를 통과하는지 확인합니다. 4. 리팩토링: 코드를 개선하고 최적화합니다. * 예시: 간단한 덧셈 함수 작성 (파이썬 기준) 1. 실패하는 테스트 작성 def test_add(): result = add(1, 2) assert result ==.. 2023. 8. 23.
[무근본 WEB(웹)표준] Restful API 가 대체 뭔데 난리야 !? - 쉽게 알려드림 RESTful API는 웹 서비스의 설계와 구현에 있어서 널리 사용되는 아키텍처 스타일입니다. REST는 "Representational State Transfer"의 약자로, 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처 원칙 집합을 의미합니다. RESTful API는 이러한 REST 원칙을 따르는 웹 서비스 API를 지칭합니다. RESTful API의 주요 특징은 다음과 같습니다: 1. 자원(Resource) 중심의 아키텍처 RESTful API는 웹 서비스의 자원을 URL로 표현합니다. 예를 들어, 사용자 정보를 관리하는 서비스에서는 `/users`라는 URL을 통해 사용자 자원에 접근할 수 있습니다. 2. 상태를 유지하지 않음 (Stateless) 각 요청은 서버에서 어떠한 상태 정.. 2023. 8. 23.
[무근본자바(JAVA)] OOP의 다섯가지 설계 원칙이 뭔데? 쉽게 설명해줄게 OOP의 5가지 설계 원칙은 "SOLID"라는 약어로 알려져 있습니다. SOLID 원칙은 객체 지향 프로그래밍과 설계에 있어서 효율적이고, 유지보수가 용이한, 확장성 있는 시스템을 만들기 위한 핵심 원칙들을 의미합니다. 각 원칙은 다음과 같습니다: 1. S - 단일 책임 원칙 (Single Responsibility Principle, SRP) - 한 클래스는 하나의 책임만 가져야 한다는 원칙입니다. 즉, 클래스가 변경되어야 하는 이유는 오직 하나뿐이어야 합니다. 이 원칙을 따르면, 각 클래스는 명확한 목적을 가지게 되어 코드의 유지보수가 용이해집니다. 2. O - 개방-폐쇄 원칙 (Open-Closed Principle, OCP) - 소프트웨어의 구성요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어.. 2023. 8. 22.
[무근본 자바(JAVA)] OOP란? OOP가 뭔데? 쉽게 설명해줄게 ! 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 현실 세계의 사물이나 개념을 객체로 표현하고, 이러한 객체들 간의 상호작용을 통해 프로그램을 구현하는 방법론입니다. OOP는 크게 네 가지 주요 개념으로 구성되어 있습니다: 캡슐화, 상속, 다형성, 그리고 추상화입니다. 1. 캡슐화(Encapsulation) - 캡슐화는 객체의 데이터와 그 데이터를 처리하는 함수를 하나로 묶는 것을 의미합니다. 이를 통해 객체의 내부 데이터는 외부에서 직접 접근할 수 없게 되며, 오직 객체가 제공하는 함수를 통해서만 접근이 가능하게 됩니다. 이렇게 함으로써 데이터의 무분별한 변경을 막을 수 있으며, 객체의 안정성을 높일 수 있습니다. 2. 상속(Inheri.. 2023. 8. 22.
[무근본 안드로이드] 인형 가격 구하기 [질문사항] 안드로이드 프로그래밍....도와주세요 라디오 버튼 6개의 각각 두번째 항목이 선택된 게 초기화면이자 초기화 버튼을 눌럿을 때의 화면인데 총액 버튼을 누르면 선택된 항목의 갑이 더해져 나와야하는데 애뮬레이터를 켜고 바로는 되는데 초기화버튼을 누르고 나서 총액 버튼을 누르면 계산 버튼을 눌러도 0이더라구요 총액버튼을 누르면 2000이 떴으면 좋겠습니다. public void onBtn1(View v){ //초기화 버튼 rb2.setChecked(true); rb5.setChecked(true); this.cnt = 1; // 수량 this.dollPrice = 0; this.sizePrice = 0; tv1.setText(cnt + ""); Toast.makeText(getApplicationC.. 2023. 4. 20.
[무근본 파이썬] 파이썬을 이용한 네이버 증권 정보 크롤링 방법 ! - 왕초보도 이해하는 파이썬 코드예시 [질문사항] python을 이용한 네이버 증권정보 크롤링 코드 다음 코드를 입력하였을 때 제대로 empty dataframe 이라서, 엑셀에도 아무 내용이 표시되지 않습니다. 혹시 어떻게 고쳐야 할까요? from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd import time # 크롬드라이버 경로 설정 driver = webdriver.Chrome('your_chrome_driver_path') # 종목 코드 입력 code = '005930' # 재무제표 페이지로 이동 url = f' https://finance.naver.com/item/coinfo.naver?code= {code}&target=finsum_m.. 2023. 4. 20.
[무근본 스프링] @Test 어노테이션에 대해 - 왕초보도 이해하는 상세 설명 ! @Test 어노테이션은 JUnit 프레임워크에서 테스트 메서드임을 나타내는 어노테이션입니다. Spring Framework에서도 JUnit을 기반으로 하므로 @Test 어노테이션을 사용하여 테스트 코드를 작성할 수 있습니다. 이 어노테이션은 메서드에 붙여서 해당 메서드가 테스트 메서드임을 나타내며, 해당 메서드가 실행되면서 자동으로 단위 테스트가 수행됩니다. @Test 어노테이션에 대해 더 자세히 알아보겠습니다. [사용 방법] @Test 어노테이션은 다음과 같이 메서드에 붙여 사용합니다. @Test public void testMethod() { // 테스트할 코드 작성 } @Test 어노테이션을 사용하여 정의한 메서드는 단위 테스트를 위한 메서드입니다. 메서드 이름은 테스트의 의미를 잘 나타내도록 작성.. 2023. 4. 20.
[무근본 스프링] REST API에서 PATCH 요청이란? - 코드 샘플 REST API에서 PATCH 요청은 리소스의 일부분을 수정하는 요청입니다. PUT 요청과는 달리, PATCH 요청은 리소스의 전체를 교체하지 않고 일부분만 수정하는 것이 목적입니다. 예를 들어, 게시글의 제목(title)만 변경하고자 할 경우, PATCH 요청을 사용하여 서버에 해당 변경 사항을 전달합니다. PATCH 요청은 PUT 요청과 달리 전송되는 데이터가 변경된 속성만 포함하고, 나머지 속성은 변경되지 않은 상태로 유지됩니다. REST API에서 PATCH 요청을 처리하기 위해서는, 클라이언트가 전달한 데이터를 분석하여 변경된 속성을 식별하고, 해당 속성만 업데이트하는 로직이 필요합니다. 이를 위해서는 서버 측에서 별도의 PATCH 요청 핸들러를 구현해야 합니다. Spring Framework에.. 2023. 4. 20.
[무근본 자바] restapi patch 요청 테스트 중 : java.lang.NoClassDefFoundError 해결 방안 [질문사항] 현재 restapi patch요청 테스트 중인데 java.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient 이런 오류가 납니다. 구글에서 찾아봐도 안나와서 질문드립니다. 아래 테스트 코드입니다. class ArticleApiControllerTest { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; @Autowired private ArticleServiceImpl articleService; @Autowired private ArticleRepository articleRepository; @Before p.. 2023. 4. 20.
[무근본 파이썬] Pandas 를 통한 Excel 데이터 활용하기 ! [질문] 파이썬으로 엑셀 다른 시트에 있는 값을 vlookup 하여 변경하고 컴마 기준으로 데이터를 split 하여 생성 후 저장 할 수 있을까요?.. 배우면서 공부하는 중인데 쉽지 않네요 ㅠ.. 예를 들어 첫번째 시트에 밑에 와 같은 데이터가 있으면 ID 성별 좋아하는숫자 좋아하는음식 1 남자 1,2,3 빵 2 여자 1,2 밥 3 남자 2,3,4 빵 두번째 시트에 성별 남자 1 성별 여자 2 좋아하는음식 빵 1 좋아하는음식 밥 2 최종적으로 나와야 하는 데이터 : ID 성별 좋아하는 숫자1 좋아하는 숫자2 좋아하는 숫자3 좋아하는 숫자4 좋아하는음식 1 1 1 2 3 1 2 2 1 2 2 3 1 2 3 4 1 [답변] 파이썬에서 엑셀 파일을 다루는 경우에는 대표적으로 pandas 라이브러리를 많이 사용.. 2023. 4. 18.
[무근본 파이썬] 파이썬 커피가게 큐 대기인원 코드 [질문] 파이썬으로 커피가게의 큐 대기인원 코드를 작성하시오 - 오전 8시에 시작해서 오후 10시에 종료하는 커피가게 큐 대기인원의 분포를 모의실험하시오. 큐에 최대 인원은 몇 명인가? 시간대 별로 도착시간 분포를 조정해 보세요 즉, 점심시간에는 사람이 붐비게 해 봅시다. 주문을 두명이 받는다면 어떻게 되는가? - Cust Class를 만들고, arriveTime, orderTime, outTime을 관리한다. - Shop Class를 만들고, custQueue를 만든다. . getSize method: 큐 크기를 구한다. . entCust method: 큐에 cust를 넣는다. . outCust method: 큐에서 cust를 내보낸다.(조건은 현재 시간보다 outTime이 작은 cust는 deQueu.. 2023. 4. 18.
[무근본 스프링] 클라이언트 상호 인증서 방식 사용하기(발급부터 사용까지) 웹에서 클라이언트 상호 인증서 방식을 사용하는 이유 웹에서 클라이언트 상호 인증서 방식을 사용하는 이유는 다음과 같습니다. 보안 강화 일반적인 HTTP 프로토콜을 사용하는 웹 서비스는 암호화되지 않은 데이터를 전송하기 때문에, 중간에 데이터를 가로채어서 정보를 탈취할 수 있는 보안 취약점이 존재합니다. HTTPS 프로토콜은 데이터를 암호화하여 전송하기 때문에, 이러한 보안 취약점을 보완할 수 있습니다. 클라이언트 상호 인증서 방식을 사용하면, 서버와 클라이언트 간의 상호 인증을 수행하여 더욱 보안을 강화할 수 있습니다. 불법 접근 방지 일반적인 로그인 방식은 사용자 ID와 비밀번호를 입력하여 인증하는 방식입니다. 이 경우, 타인이 사용자 ID와 비밀번호를 알아내어 불법적으로 접근할 수 있는 취약점이 존재.. 2023. 4. 15.
[무근본 스프링] @Value 어노테이션에 대해 (예시 코드 포함) Spring에서 @Value 어노테이션에 대해 Spring에서 @Value 어노테이션은 스프링 빈으로 등록된 객체에서 properties 파일이나 환경 변수 등의 값을 주입받을 때 사용됩니다. @Value 어노테이션을 사용하면, properties 파일이나 환경 변수 등에 정의된 값을 손쉽게 읽어올 수 있습니다. 예를 들어, 다음과 같은 properties 파일이 있다고 가정해봅시다. database.url=jdbc:mysql://localhost:3306/mydb database.username=admin database.password=1234 이 properties 파일에 정의된 값을 읽어오기 위해서는, 먼저 Spring의 PropertySourcesPlaceholderConfigurer 빈을 등록.. 2023. 4. 15.
[무근본 스프링] @transactional 어노테이션에 대해 (예시코드 포함) Spring의 @Transactional 어노테이션 Spring의 @Transactional 어노테이션은 메서드 레벨이나 클래스 레벨에서 사용할 수 있으며, 데이터베이스 트랜잭션 관리를 간편하게 할 수 있게 해줍니다. @Transactional 어노테이션을 사용하면, 해당 메서드가 실행될 때 Spring은 트랜잭션을 시작하고, 메서드 실행이 완료될 때 트랜잭션을 종료합니다. 만약 메서드 실행 중에 예외가 발생하면, Spring은 자동으로 트랜잭션 롤백을 수행하여 이전 상태로 되돌립니다. 예를 들어, 다음은 @Transactional 어노테이션을 사용하여 간단한 서비스 계층의 메서드를 구현한 예입니다: @Service public class UserService { @Autowired private Use.. 2023. 4. 15.
[무근본 파이썬] 파이썬에서 삼각형 별모양 출력하는 방법 ! 파이썬에서 아래와 같이 별표가 출력되도록 하는 코드를 소개하겠습니다. 1번: ****** ***** **** *** ** * 2번: * ** *** **** ***** ****** 3번: ****** ***** **** *** ** * 4번: * *** ***** ******* ********* 1번: for i in range(6, 0, -1): print("*" * i) 2번: for i in range(1, 7): print(" " * (6 - i) + "*" * i) 3번: for i in range(6, 0, -1): print(" " * (6 - i) + "*" * i) 4번: for i in range(1, 6): print(" " * (5 - i) + "*" * (2 * i - 1)) 위 .. 2023. 4. 9.
[무근본 파이썬] 사용자에게 값을 입력받은 뒤 리스트의 값 전달해주기 ! 파이썬에서 사용자로부터 숫자를 입력받는 방법은 input() 함수를 이용하는 것입니다. 이후, 리스트에서 해당하는 숫자에 해당하는 값을 출력하려면, 입력받은 숫자를 리스트의 인덱스로 사용하여 리스트이름[인덱스] 형태로 접근하면 됩니다. 아래는 이를 구현한 예시 코드입니다. # 리스트 생성 my_list = [10, 20, 30, 40, 50] # 사용자로부터 숫자 입력 받기 number = int(input("숫자를 입력하세요: ")) # 입력받은 숫자를 리스트에서 찾아 해당하는 값 출력 value = my_list[number] # 결과 출력 print("리스트에서 {}번째 자리에 해당하는 값은 {}입니다.".format(number, value)) 위 코드에서는 input() 함수를 이용하여 사용자로.. 2023. 4. 9.
[무근본 스프링(Spring Framework) 공부 - 컴파일 하는 방법 !! (2) - 왕초보도 이해하는 스프링 Gradle은 Groovy 언어로 작성된 오픈 소스 빌드 자동화 도구입니다. Gradle은 Maven과 같은 빌드 도구보다 더 유연하며, Groovy DSL을 사용하여 빌드 스크립트를 작성할 수 있습니다. Spring Framework 프로젝트를 Gradle을 사용하여 컴파일하는 방법은 다음과 같습니다. 1. 먼저, Gradle을 설치합니다. 2. 프로젝트 디렉토리에서 build.gradle 파일을 생성합니다 touch build.gradle 3. build.gradle 파일을 열고, Spring Framework에 필요한 의존성을 추가합니다. dependencies { implementation 'org.springframework:spring-core:5.3.5' implementation 'org... 2023. 3. 27.
[무근본 스프링(Spring Framework) 공부] 컴파일 하는 방법 !! (1) - 왕초보도 이해하는 스프링 Spring Framework는 자바 언어로 작성된 오픈 소스 애플리케이션 프레임워크이며, 일반적으로 Maven 또는 Gradle과 같은 빌드 도구를 사용하여 컴파일됩니다. 아래 예시는 Maven을 사용하여 Spring Framework를 컴파일하는 간단한 예시입니다. 1. 먼저, Maven을 설치하고 환경 변수를 설정합니다. 2. 프로젝트 디렉토리에서 Maven 프로젝트를 생성합니다. mvn archetype:generate -DgroupId=com.example.spring -DartifactId=my-spring-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 3. 생성된 프로젝트 디렉토리로 이동합니다. cd .. 2023. 3. 27.
[무근본 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.