일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- C
- knockon
- Java
- windows
- php
- 개발공부
- cording
- bootcamp
- 개발
- plan
- git
- study
- 매크로
- 오답풀이
- Mac
- 개인서버
- Developer
- CodeIgniter
- React
- 홈서버
- WPF
- 외부접속
- 프로그래밍 언어론
- CSS
- 프로그래밍언어론
- 정보처리기능사
- 자격증
- html
- 220821
- 방화벽
- Today
- Total
목록bootcamp (12)
bunta의 보조기억장치
💡 ELF 파일이란?ELF(Executable and Linkable Format) 파일은 Linux나 Unix 계열 운영체제에서 사용되는 실행 파일, 오브젝트 파일, 공유 라이브러리, 코어 덤프 파일의 표준 포맷이다.🔎 ELF 헤더헤더는 ELF 파일의 맨 앞에 위치하며 파일이 어떤 종류의 ELF인지, 어떤 구조를 따르는지 등의 정보를 담고 있다. 64비트 기준으로 헤더는 다음과 같은 형식으로 구성되어 있다.typedef struct { unsigned char e_ident[16]; // ELF 마법 번호 및 식별 정보 uint16_t e_type; // 파일 타입 (실행파일, 오브젝트파일 등) uint16_t e_machine; // 아키텍처 (..
💡 메모리 섹션메모리에서 프로그램이 실행될 때 운영체제는 해당 프로그램을 여러 구역으로 나눠서 관리한다.이 중 대표적인 Code Section, Data Section, Heap, Stack에 대해서 다뤄보고자 한다.🔎 Code Section실행할 프로그램의 기계어 코드(명령어)가 저장되는 영역이다.보통 읽기 전용으로 설정되어 있어서 코드 수정이 불가능하며, 프로그램이 실행되면 이 영역의 명령어를 CPU가 순차적으로 읽어 수행하게 된다.🔎 Data Section전역 변수, 정적 변수가 저장되는 영역이다.프로그램이 실행되는 동안 항상 메모리에 존재하며, 초기화된 데이터와 초기화되지 않은 데이터를 나누어 저장한다.🔎 Heap동적 메모리 할당을 위한 영역이다.프로그래머가 직접 malloc(), new,..
💡 로더(Loader)란?실행 가능한 파일을 메모리에 적절하게 배치하고 실행할 준비를 해주는 시스템 프로그램이다.예를 들어 터미널에서 ./myapp 이나 main.exe를 실행했을 때 이걸 메모리에 올리고 실행 가능한 상태로 만드는 작업을 하는 게 바로 이 로더이다.🔎 로더 작동방식1. 할당(Allocation) - 실행 파일의 구조를 분석하여 필요한 메모리 공간을 예약 2. 연결(Linking) - 실행 파일이 사용하는 외부 함수나 전역 변수의 심볼을 연결 3. 재배치(Relocation) - 각 심볼의 실제 메모리 주소를 계산하여 실행 파일 내 참조 위치들을 올바른 주소로 수정 4. 적재(Loading) - 준비된 코드와 데이터들을 예약한 메모리 공간에 실제로 적재하고 실행 ..
💡 링커(Linker)란?여러 개의 오브젝트 파일을 하나의 실행 파일로 연결해주는 프로그램을 말한다.코드를 컴파일 했을 때 목적 파일이 생성되는데 이 때 이 목적 파일만으로는 프로그램을 실행할 수 없으므로 여러 개의 목적 파일들 사이의 함수 참조나 변수 참조를 연결해주는 것이 링커의 역할이다.🔎 동적 링킹(Dynamic Linking)프로그램 실행 시점에 필요한 라이브러리를 따로 불러오는 방식 ✅ 장점1. 파일 크기 감소 - 여러 프로그램이 같은 라이브러리를 공유하므로 실행 파일 크기가 작아짐 2. 메모리 사용 효율성 - 운영체제는 하나의 라이브러리를 여러 프로세스에서 공유하기 때문에 메모리 절약이 가능 3. 업데이트 용이 - 라이브러리 하나만 교체하면 모든 프로그램이 자동으로 최신 ..
💡 컴파일러란?컴파일이란 프로그래머가 고급언어(C, C++, Java 등)로 작성한 코드 전체를 컴퓨터가 이해할 수 있도록 기계어로 번역하는 과정을 말한다. 그리고 이 컴파일을 자동으로 수행해주는 프로그램을 컴파일러라고 부른다.컴파일러는 여러 종류가 있지만 이 글에서는 그 중에서도 gcc에 대해서 다뤄보고자 한다.🔎 컴파일 과정1. 전처리(Preprocessing)#include, #define 같은 전처리 지시문 처리매크로 치환, 헤더 파일 포함 등2. 컴파일(Compilation)전처리된 코드를 어셈블리어로 변환문법 검사, 변수·함수 분석, 오류 체크 등3. 어셈블리(Assembly)어셈블리 코드를 기계어로 번역4. 링킹(Linking)여러 개의 목적 파일과 라이브러리를 연결해 실행 가능한 프로그..
💡 아키텍처(Architecture)란?아키텍처는 건축학, 소프트웨어, 컴퓨터 분야 등에서 사용되는 용어로 복잡한 구조를 어떻게 설계하고 구성할 것인가를 다루는 개념이다.이 글에서는 그 중에서도 컴퓨터 분야에서의 아키텍처에 대해 다루고자 한다.컴퓨터 아키텍처는 컴퓨터 시스템이 어떻게 구성되어 있으며 내부에서 어떤 방식으로 동작하는지를 설계한 구조를 의미한다.예를 들어 CPU는 어떻게 작동하는지, 메모리는 어떤 순서로 데이터를 처리하는지, 입출력 장치는 어떻게 연결되는지 등과 같이 모든 구성 요소들이 어떤 원리로 연결되었으며 어떻게 정보를 주고받고 동작하는지를 정의한 것이 컴퓨터 아키텍처이다.🔎 폰 노이만 구조(Von Neumann Architecture)폰 노이만 구조는 1945년 수학자 존 폰 노이..
💡 탐색 알고리즘이란?어떠한 데이터 구조 안에서 원하는 데이터를 찾아내기 위한 방법을 말한다.대표적인 탐색 알고리즘으로는 순차 탐색, 이진 탐색, 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 등이 있다.🔎 순차 탐색(Sequential Search)시간 복잡도 : O(n) 데이터 집합을 처음부터 끝까지 하나씩 비교하면서 데이터를 찾아내는 방법이다.한쪽 방향으로만 탐색을 진행하여 선형 탐색(Linear Search)라고 부르기도 한다.정렬이 되지 않은 데이터 집합이어도 사용 가능하다는 장점이 있지만 모든 데이터를 탐색하기 때문에 느리다는 단점이 있다. 🔎 이진 탐색(Binary Search)시간 복잡도 : O(log n) 정렬된 데이터 집합에서 중간값과 비교하며 탐색 범위를 절반씩 줄여나가며 ..
💡 정렬 알고리즘이란?어떤 데이터가 주어졌을 때 특정한 기준에 따라 순서대로 나열하는 방법을 말한다.대표적인 정렬 알고리즘으로는 버블 정렬, 선택 정렬, 삽입 정렬이 있다.🔎 버블 정렬 (Bubble Sort) 시간 복잡도 : O(n²) 인접한 두 값을 비교해 큰 값을 뒤로 보내 정렬하는 방법이다.정렬을 한번 진행할 때마다 뒤에서부터 하나씩 정렬되는 모습이 마치 거품이 올라는 모습같아 버블 정렬이라는 이름이 붙었다.구현 난이도는 쉬우나 매번 값을 비교해서 정렬하므로 시간이 오래걸리는 편이다. 다만 정렬이 된 데이터에서는 한번의 순회로 정렬을 완료하는 성능을 보여준다. 🔎 선택 정렬 (Selection Sort) 시간 복잡도 : O(n²) 데이터 전체에서 가장 작은 것을 찾아 차례로 맨 앞에 정렬..