2024/10 29

OSTEP 5장

Unix 시스템에서 PID는 프로세스의 실행이나 중단과 같이 특정 프로세스를 대상으로 작업을 해야할 경우프로세스를 지칭하기 위해서 사용부모 프로세스 fork() 함수를 실행-> 자식 프로세스는 fork()가 실행된 지점부터 시작됨 -> 자식 프로세스는 부모 프로세스와 동일하지 않음 -> 자신의 주소 공간, 자신의 레지스터, 자신의 PC값을 갖는다. ** 부모 프로세스와 자식 프로세스는 fork() 시스템 콜 반환값이 서로 다름부모 - 자식 PID자식 - 0fork() 시스템 콜프로세스를 생성할 때 사용된다.자식 프로세스는 부모 프로세스와 동일하지 않음자식 프로세스는 자신만의 주소 공간, 레지스터, 자신의 PC 값을 갖는다.wait() 시스템 콜부모 프로세스가 자식 프로세스가 종료될 때까지 대기할 때 사용..

운영체제(OSTEP) 2024.10.09

OSTEP 4장

프로세스일반적으로 프로세스는 실행 중인 프로그램으로 정의**프로그램 - 디스크 상에 존재, 실행을 위한 명령어와 정적 데이터의 묶음운영체제는 CPU를 가상화하여 CPU가 여러 개 존재한다는 환상을 제공한다.- 문맥교환을 통한 동시성 구현을 통해 CPU 가상화를 실현**시분할 기법하나의 프로세스를 실행하고 중단 후 다른 프로세스를 실행하는 것을 반복 -> 여러 CPU가 존재한다는 환상을 줌- CPU를 공유하기 때문에, 각 프로세스의 성능은 낮아짐 ** 문맥교환 - CPU에서 프로그램 실행을 잠시 중단하고 다른 프로그램을 실행하는 것- 현재 실행 중인 프로세스의 PCB를 준비큐 혹은 대기큐에 저장하고, 준비큐에서 우선순위가 높은 프로세스의PCB를 CPU에 적재하는 것을 의미메커니즘과 정책**메커니즘 - Ho..

운영체제(OSTEP) 2024.10.08

배열, 연결리스트, 스택,

배열동일한 타입의 변수를 모아 묶어 놓은 것메모리 공간에 연속적으로 할당된다. - 가상 메모리 공간에서 연속적, 물리 메모리에서는 항상 연속적이지 않음인덱스를 이용해서 접근 가능 - 인덱스는 0부터 시작 배열이 만들어진 후 배열의 크기 변경 불가 - 동적 배열의 경우 새로운 배열을 생성해서 기존 배열을 복사함장점빠른 접근 시간 - 인덱스를 이용하여 O(1) 시간에 직접 접근 가능 메모리 상에서 연속적으로 저장되어 있어 캐시 효율성이 높다.- 반복적인 접근 패턴, 루프 내에서 여러 번 참조로 인해 시간적 지역성이 높음- 연속적인 메모리 할당, 순차적인 적근 패턴으로 인해 공간적 지역성이 높음 각 요소가 동일한 크기를 가져 메모리를 효율적으로 사용 구현이 간단하다. 단점고정된 크기 - 배열은 한 번..

순환(재귀), 반복

재귀 (순환)재귀란 주어진 문제를 해결하기 위해 자신을 다시 호출하는 프로그래밍 기법분할정복 > 재귀 - 기술면접 피보나치, 이항계수, 이진 트리 알고리즘 등등 ** 재귀함수의 핵심 요소 두 가지1. 종료 조건 (기본 케이스 - Base case)- 재귀 함수가 종료되는 조건이 반드시 필요하다.2. 문제 축소(재귀 케이스 - Recursive case)- 재귀 함수는 큰 문제를 반드시 작은 문제로 축소시켜야한다.재귀 활용- 트리와 그래프 순회- 분할 정복 알고리즘- 동적 프로그래밍- 백트래킹 알고리즘직접 재귀와 간접재귀직접 재귀 - 함수가 직접 자기 자신을 호출간접 재귀 - 함수 A가 함수 B를 호출하고, B가 다시 A를 호출하는 형태장점- 코드가 간결해지고 이해하기 쉬움- 일부 알고리즘을 자연스럽게 표..

CPU와 GPU, HDD와 SSD

CPU다양한 환경의 작업을 처리하기 위해 비교적 큰 캐시 메모리, 복잡한 컨트롤 유닛, ALU로 구성됨CPU는 적지만 강력한 여러 개의 코어들로 구성되어 있음CPU는 복잡하고 순차적인 작업에 적합 (직렬처리)**복잡한 로직, 순차적인 처리, 다양한 종류의 연산이 섞인 작업에 적합다양한 작업 처리, 복잡한 데이터 구조, 캐싱 ,컨텍스트 스위칭을 위해 큰 메모리를 요구 일반적인 프로그래밍 언어와 모델 사용GPU특화된 연산을 처리하기 위해 SM, 비교적 작은 캐시, 비교적 단순한 ALU로 구성됨GPU는 수백 혹은 수천 개의 코어들로 구성되며, 각 코어는 비교적 단순한 구조를 가지고 있음 GPU는 대규모 병렬적인 작업에 적합 (그래픽 렌더링, 머신 러닝, 암호화 등)**단순하고 반복적, 대량의 데이터를 병렬적으..

1의 보수, 2의 보수

보수를 사용하는 이유컴퓨터 산술 논리 장치(ALU)는 기본적으로 덧셈 연산만 수행하도록 설계 됨즉, 컴퓨터는 덧셈만 수행 가능하므로 음수를 보수로 변환하여 계산하기 위해서 보수를 사용한다.2의 보수를 사용하는 이유1. 표현 범위의 확장 - 같은 비트 수에서 더 넓은 범위의 숫자를 표현할 수 있음 (2의 보수는 0이 하나)2. 0의 유일한 표현 - 1의 보수는 -0, +0 즉, 0이 두 가지로 표현 됨- 2의 보수는 0이 하나로 표현 됨3. 간단한 덧셈/뺄셈 연산- 2의 보수 시스템에서 덧셈과 뺄셈이 더 일관되고 단순한 방식으로 처리 됨 (1의 보수는 순환 연산 필요)4. 오버플로우 감지 용이- 덧셈과 뺄셈에서 오버플로우를 쉽게 감지할 수 있다.- 2의 보수에서 부호비트의 변화를 통해 오버플로우를 쉽게 감..

JPG, PNG, GIF 차이점

손실, 무손실 압축 방식** 무손실 압축 방식원본 데이터 품질을 그대로 유지하면서 파일 크기 줄임압축을 해제하면 원본과 동일한 품질의 이미지를 얻을 수 있다. PNG, GIF가 이 방식을 사용 파일 크기 감소 효과는 손실 압축에 비해 적음 ** 손실 압축 방식일부 데이터를 영구적으로 제거하여 파일 크기를 줄임압축 과정에서 원본의 일부 정보가 손실됨 JPG가 이 방식을 사용높은 압축률로 파일 크기를 크게 줄일 수 있지만, 품질을 다소 저하됨JPG (JPEG)용량이 큰 이미지 파일을 좀 더 압축해 전송할 수 있도록 개발한 파일 형식손실, 무손실 압축 방식 모두 지원 - 일반적으로 손실 압축 방식을 사용 24비트 - 1600만 색상 지원사진, 복잡한 이미지에 적합투명도 지원 안 함 ** 장점손실 압축 방식을 ..

C언어 포인터

포인터메모리 주소를 저장하기 위한 변수포인터 변수를 이용하여 메모리에 직접 접근이 가능하다.** 포인터 변수에는 메모리 시작 번지 주소가 저장됨-> 포인터 타입만 알면 쉽게 추측 가능하기 때문** 포인터 변수의 크기는 64비트 시스템에선 8byte, 32비트 시스템에선 4byte** 포인터를 초기화하지 않고 값을 대입해서는 안 됨-> 아무 메모리 공간에 접근할 경우 문제 발생 가능** 포인터에 0을 대입하는 것은 널 포인터를 의미한다.포인터 변수 선언// 타입 * 변수명;int * pnum;포인터 연산자 ‘&’와 ‘*’피연산자의 주소 값을 반환하는 &연산자& 연산자의 피연산자는 변수여야 함포인터가 가리키는 메모리를 참조하는 *연산자pnum은 포인터 변수를 의미 *pnum은 포인터 변수가 가리키는 변수를 ..

실수 표현법(부동 소수점, 고정 소수점)

고정 소수점이진수에서 소수점 위치를 고정하여 실수를 나타내는 방식 Ex) 32비트 1비트 부호 비트15비트 정수부 비트16비트 소수부 표현## 2.625를 고정 소수점으로 표현한 결과 부호 정수부 실수부0 000 0000 0000 0010 1010 0000 0000 00002.625 => 0000000000000010.1010000000000000장단점장점고정 소수점 방식은 부동 소수점 방식에 비해 표현 방법이 단순하고 속도가 빠름단점표현할 수 있는 범위가 적음정밀도가 낮음-> 표현할 수 있는 범위가 적기 때문부동 소수점소수점의 위치를 이동시킬 수 있는 수 표현 방식부동 소수점 수의 일반적인 형태 N = (-1)^S M * B^ES - 부호, M - 가수 , B -..