컴퓨터 구조 29

[컴퓨터 구조](27)[동적 메모리]

동적 메모리 할당: 실행 중에 메모리를 할당heap공간의 메모리 영역이 할당됨명시적 할당: 프로그래머가 직접 메모리 할당 관리예) C의 malloc & free묵시적 할당: 시스템이 메모리 할당 관리예) JAVA의 가비지 컬렉션C의 동적 메모리 함수malloc(size): size만큼의 동적 메모리 할당성공하면 메모리 블록 포인터 리턴실패하면 Null 리턴 후 errno 설정free(포인터): 포인터에 있는 공간을 할당 해제malloc 등의 동적 메모리를 쓰고 나서 반드시 해야됨. (안하면 계속 공간 차지 -> 메모리 누수)기타calloc: 블록을 할당하고 0으로 초기화함realloc: 이전에 할당된 블록의 크기 변경sbrk: 힙을 늘리거나 줄이기 위해 사용메모리 할당의 제약할당된 블록의 수, 크기 제어..

CS/컴퓨터 구조 2025.03.06

[컴퓨터 구조](26)[가상메모리 동작]

가상메모리는 프로그램이 사용하는 메모리를 페이지 단위로 나누고 불러오거나 지운다. PTE: 가상 페이지를 물리적 페이지에 대응시키는 테이블페이지 테이블: PTE의 배열    페이지 테이블에 요청한 가상주소에 대응하는 물리주소가 있으면 페이지 적중    페이지 테이블에 요청한 가상주소에 대응하는 물리주소가 없다면 페이지 오류    페이지를 하드디스크에서 불러옴 (메인 메모리에 불러올 공간이 없다면 다른 페이지 지우고 불러옴) -> 해당 PTE업데이트 -> 프로그램 재실행    페이지 오류로 인해 미스 패널티 발생 MMU: 메모리 관리 장치- 가상주소 -> 물리주소로 바꿔줌(페이지 테이블 참조)- 권한 검사- 페이지 폴트 처리 가상메모리의 동작: 마치 캐시처럼 동작 (컴퓨터 구조 19 참고)    CPU가 ..

CS/컴퓨터 구조 2025.03.05

[컴퓨터 구조](25)[가상 메모리]

가상 메모리: 가상 주소 공간을 사용마치 한 프로그램 혼자서 메모리를 사용하는 것 같게 함.메인 메모리를 효율적으로 사용: 필요한 내용만 하드디스크에서 불러옴.메모리 관리 간소화: 프로그램은 각자 일정 크기의 연속적인 메모리 공간을 사용한다 알고 있음.실제 물리적 관리는 운영체제가 하고 프로그램은 신경 안씀.주소 공간 격리: 메모리에 간접 접근, 프로그램마다 메모리 분리 -> 보안성 좋음한 프로세스는 다른 메모리에 끼어들 수 없음. 필요할 때만 서로 공유사용자 프로그램이 권한있는 커널 정보나 코드에 엑세스 불가메모리 관리를 위한 가상 메모리: 메모리를 단순한 선형 배열로 볼 수 있다.메모리 할당 단순화: 단순 선형 배열의 메모리 구조, 독립적이고 정해진 크기의 공간이라 단순함.프로세스 간 코드 및 데이터..

CS/컴퓨터 구조 2025.03.04

[컴퓨터 구조](24)[프로세스 생성 & 종료]

프로세스의 생성과 종료(UNIX) pid: 프로세스 식별자    운영체제에서 각 프로세스를 식별하기 위해 부여한 번호. 일반적으로 양의 정수로 부여된다.(pid가 음수면 오류로 취급) 프로세스에서 자식 프로세스를 만들거나 종료할 수 있다. 프로세스 생성: fork()int fork(void)의 함수 형태이며 자식 프로세스를 생성한다. 자식 프로세스엔 0을, 부모 프로세스에는 자식의 pid를 반환한다.자식은 부모와 거의 동일하지만 pid가 다르고 다른 메모리 공간을 사용한다. 또한 독립된 프로세스여서 서로 영향을 주지 않는다.예)int main(){ pid_t pid; int a = 3; pid = fork(); //자식만 실행// if (pid == 0) {printf("child..

CS/컴퓨터 구조 2025.03.03

[컴퓨터 구조](23)[프로세스]

프로세스: 실행중인 프로그램의 동적인 실행 단위(즉, 실행중인 프로그램을 운영체제가 추상화한 것)(프로세스는 프로그램, 프로세서와는 다르다.)    프로그램: 코드와 데이터가 저장된 파일    프로세서: CPU  프로세스 상태    실행: 프로세서가 프로세스를 실행중인 상태    준비: 실행할 준비는 되었지만, 아직 운영체제에서는 실행 안된 상태    차단: 특정 작업을 수행해서 다른 이벤트가 발생하기 전까지 준비가 되지 않은 상태    - 상태 변화        준비 -> 실행: 프로세스가 스케줄링됨        실행 -> 준비: 프로세스 스케줄 취소        차단 -> 준비: 일시적으로 차단되었다가 준비 상태로 복귀(컴퓨터 구조 9 참고)프로세스 추상화논리적 제어 흐름: 각 프로세스마다 CPU를 ..

CS/컴퓨터 구조 2025.02.28

[컴퓨터 구조](22)[제어흐름변경]

일반적으로 프로세서는 프로그램의 흐름이 순차적이라 생각하고 동작, 그러나 제어 흐름이 바뀔 때가 있다.명령어로 제어 흐름 변경: 전통적으로 제어 흐름을 변경하는 방법점프(JMP), 분기콜(CALL), 리턴-> 여러 환경에서 유연하게 작동하지 않음예외적인 제어 흐름 변경: 제어 흐름에 갑작스런 변화를 만들어 유연하게 처리할 수 있게함컴퓨터의 모든 수준에서 발생예) 키보드 입력, 커널 수준의 문맥 전환, 응용 프로그램에서의 전환 등예외상황: 일부 이벤트에 대한 응답으로 OS커널에 대한 제어 이전유저 코드에서 특정 이벤트 발생 -> 커널에서 예외처리 -> 유저코드 다음 줄로 복귀예외 테이블: 각 이벤트마다 고유 번호, 핸들러(예외 처리하는 코드) 주소 저장예외 분류동기적 예외: 현재 명령어 실행 중에 발생하는..

CS/컴퓨터 구조 2025.02.27

[컴퓨터 구조](21)[ELF와 링커심볼]

ELF: 실행가능하고 링크 가능한 포맷 (목적파일의 표준 바이너리 포맷)예) a.out(UNIX), PE(Windows) (리버싱 입문 정리 2 참고), Mach-O(Mac OS)종류재배치 가능 목적 파일(.o): 다른 목적파일과 결합될 수 있는 코드, 데이터 포함하는 파일, 하나의 목적파일은 하나의 소스코드에서 생성실행 가능 목적 파일(.out): 실행될 수 있는 형태의 파일 (링킹이 완료된 상태)공유 목적 파일(.so): 다른 프로그램과 공유될 수 있는 라이브러리 (windows의 DLL)구성ELF 헤더: 워드 크기, 바이트 순서, 파일 타입, 머신 타입 등 정의세그먼트 헤더 테이블: 페이지 크기, 가상주소메모리 세그먼트, 세그먼트 크기 정의.text: 컴파일된 프로그램의 기계어 코드.rodata: ..

CS/컴퓨터 구조 2025.02.17

[컴퓨터 구조](20)[링킹]

링킹: 여러 오브젝트 파일과 라이브러리를 결합하는 과정(컴퓨터 구조 7) 에 나온 링커가 수행링킹의 종류정적 링킹: 모든 코드, 라이브러리들을 하나의 실행 파일로 결합빠름, 그러나 실행 파일 크기가 커짐, 라이브러리 추가 어렵동적 링킹: 참조 정보만 포함하고 실행 시 필요한 라이브러리를 로드실행 파일 크기 작음, 쉽게 업데이트 가능, 그러나 로드해야되기 때문에 느림링킹의 필요성모듈화: 한 파일에 몰아넣는 것이 아니라 관리하기 쉽게 별도의 작은 모듈로 분할 가능, 라이브러리 사용 가능효율성시간적 효율성: 별도 컴파일 (하나의 소스 파일을 변경하더라도 다른 소스파일까지 다시 컴파일 할 필요 없음)공간적 효율성: 실제로 상요하는 기능에 대한 코드만 넣어 메모리 절약링킹 과정: 심볼 해석 -> 재배치예)// h..

CS/컴퓨터 구조 2025.02.14

[컴퓨터 구조](19)[캐시 구조 & 원리]

캐시의 구조: set(line(block, valid bit, tag))캐시는 여러개의 set으로 구성되어 있다set은 여러개의 line으로 구성되어 있다line 안에는 valid bit, tag, cache block이 들어있다valid bit: 이 라인의 캐시 블록이 유효한지 나타냄tag: 데이터의 종류 태그cache block: 데이터(byte)캐시의 크기 = set개수*한 set당 line수*cache block캐시 읽기: 주소 기준으로 찾는다주소: tag bit, set bit, offset bitset위치 찾기 (set bit)각 line에서 일치하는 태그 있는지 찾기 (tag bit)오프셋부터 시작하는 데이터 위치 찾기 (offset bit)자료형 만큼 읽기예) 모든 캐시는 비어있고 4개의 ..

CS/컴퓨터 구조 2025.02.13

[컴퓨터 구조](18)[공간 지역성과 캐시]

지역성: 프로그램은 최근에 사용한 주소와 같거나 비슷한 데이터나 명령어를 사용하려는 경향시간 지역성: 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높다공간 지역성: 어떤 메모리 위치에서 참조된다면 그 주변 메모리를 참조할 가능성이 높다예)2x2 int 배열 arr가 있을 때,int sum1(*arr){ //행 우선 int i, j; int sum = 0; for (i=0; i 이때 sum1은 순차적으로 메모리를 참조 (arr+4*i+j에서 j가 더 자주 바뀜)sum2는 왔다갔다 메모리 참조 (arr+4i+j에서 i가 더 자주 바뀜)따라서 지역성이 좋은 것은 sum1이고, 실제로 성능도 sum1이 더 좋다.(컴퓨터 구조 7 참고)캐시 메모리: 주기억장치보다 빠르게 엑세스 할 수 있는 저장 장..

CS/컴퓨터 구조 2025.02.12
728x90