728x90

정글 128

24.01.28 CSAPP 9 - 9.5, 백준

CSAPP 9 가상메모리 한 시스템의 프로세스들은 CPU와 메인메모리를 다른 프로세스들과 공유한다. 메모리를 보다 효율적이고 더 적은 에러를 갖도록 관리하기 위해서 현대의 시스템은 가상메모리 VM이라고 알려진 메인메모리의 추상화를 제공한다. 가상메모리는 각 프로세스에 하나의 크고 통합된 사적 주소공간을 제공한다. 이것은 하드웨어 예외, 하드웨어 주소번역, 메인메모리, 디스크파일, 커널 소프트웨어들 사이의 상호작용이다. 가상메모리는 한 개의 깔끔한 매커니즘을 사용해 세 주요 기능을 제공한다. 메인메모리를 디스크에 저장 된 주소공간에 대한 캐시로 취급해서 메인메모리내 활성화 영역만 유지하고, 데이터를 디스크와 메모리간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용한다. 각 프로세스에 통일된 ..

24.01.27 CSAPP, 백준

24.01.27 CSAPP, 백준 CSAPP 3장을 다 읽어버렸다. 물론 코어타임을 할 대 한 번씩 복습하고 코어타임을 진행하겠지만 이제는 어디를 읽어야 할까 고민이 된다. 정해진 건 아직 없우니꼬ㅏ…. 다음 배우는곳이 C언어와 malloc rb트리 구현이다 보니 malloc과 관련된 9장을 미리 경험하려고 생각했다. 뭐 다음에 읽을 곳이 아니라면 다시 그 곳을 읽으면 되는것이고, 읽으면 좋은거지 읽는다고 나쁜건 없으니까. 왜.. 재미있을까 CSAPP .. 3.11 부동소수점 코드 프로세서의 부동소수점 아키텍처의 여러가지 개념 부동소수점 값들이 저장되고 접근되는 방법, 이것은 대개 레지스터들의 일부 형태로 이뤄진다. 부동소수점 데이터로 연산하는 인스트럭션 함수들의 인자와 리턴값으로 부동소수점 값들을 전달..

24.01.26 CSAPP 3.10.3 - 3.10.5, LCS, Knapsack

CSAPP 3.10.3 범위를 벗어난 메모리 참조와 버퍼오버플로우 C에서 배열참조시 범위를 체크하지 않으며, 지역변수들이 스택에 보존용 레지스터들과 리턴주소 같은 상태 정보와 함께 스택에 저장된다. 이러한 조합 때문에 심각한 프로그램 에러가 발생할 수 있는데, 스택에 저장된 상태정보가 범위를 벗어난 배열의 원소에 대한 쓰기 작업에 의해 변경되는 것이다. 그러고 나서 프로그램이 레지스터값을 재 적재하거나 이렇게 변경된 상태정보를 사용해서 ret인스트럭션을 실행할 때, 심각한 결과를 초래한다. 일반적인 상태손실을 버퍼오버플로우라고 알려져있다. 일반적으로 gets나 저장공간을 오버플로우하게 되는 함수를 사용하는 것은 나쁜 프로그래밍 습관으로 평가한다. 자주 사용하는 strcpy,strcat,sprintf 같이..

24.01.25 시험,CSAPP 3.10.2 , Algorithm,코어타임

시험 문제를 풀 때 너무 조급해서 막 접근했던 것 같다. 다음에 풀 때는 조금만 더 생각해서 하는게 오히려 시간을 줄일 수 있을 것같다. BFS DFS 문제에 대해서 잘 생각해보자 1388 import sys from collections import deque n,m = map(int,sys.stdin.readline().split()) floor = [] for i in range(n): floor.append(list(map(str,sys.stdin.readline().rstrip()))) visited = [[False for i in range(m)] for i in range(n)] cnt = 0 def bfs(x,y): q = deque() q.append((x,y)) dx = [0, 0, ..

크래프톤 정글 - 2Week 24.01.19 - 24.01.24 부제 : 치타는 웃고있다.

2Week 24.01.19 - 24.01.24 회고 2주차가 다 끝나고 3주차가 바로 쉬지않고 시작됐다. 뭐랄까 난이도가 점점 올라가면서 쉴 틈 없이 몰아치는 기분. 크래프톤 정글보다 폭풍이라는 이름이 더 잘 어울릴 것 같다는 생각도 문득 문득 떠오른다. 하지만 많이 힘들었던 2주차 동안 정말 중요하다고 생각이 들었던 것이 동료학습에 관한 부분이 었다. 폭풍에서는 동료고 뭐고 다 날라가겠지만 정글에서 동료와 함께 라면 살아남을 수 있으니까 이름을 잘 짓긴 한 것 같다. 문제풀이에 적응되기 전에 계속 새로운 키워드가 나오고 그것에 또 적응하려니 많이 힘든 주간이었다. 하루 종일 문제와 답을 번갈아가며 보다가 하루가 끝나기도 하고, 그렇게 하루가 끝나면 내가 과연 오늘 무엇을 한 걸까? 잘했을까? 라며 자책..

24.01.24 CSAPP 3.9

CSAPP 3.9 이기종 (Heterogeneous) 자료구조 C는 서로 다른 유형의 객체를 연결해서 자료형을 만드는 두 가지 방법을 제공한다. Struct 키워드를 사용해서 선언하는 구조체는 다수의 객체를 하나의 단위로 연결한다. 키워드 union으로 선언하는 공용체는 하나의 객체를 여러개의 다른 자료형으로 참조 될 수 있도록 한다. 3.9.1 구조체 C struct 선언은 서로 다른 유형의 객체들을 하나의 객체로 묶어주는 자료구조를 생성한다. 하나의 구조체 내의 서로 다른 컴포넌트들은 이름을 이용해서 참조된다. 구조체의 구현은 구조체의 모든 컴포넌트들이 메모리의 연속된 영역에 저장되며, 구조체의 포인터가 첫번째 바이트의 주소라는 점에서 배열과 유사하다. 컴파일러는 각 필드의 바이트 오프셋을 가리키는 ..

24.01.23 CSAPP 3.8, 복습,2Week, Python

CSAPP 3.8 배열의 할당과 접근 C에서 배열을 스칼라 데이터를 보다 큰 자료형으로 연계 시키는 수단이다. 한가지 특이한 점은 배열 원소들에 대한 포인터를 만들고 이들 포인터간에 연산을 할 수 있다는 점이다. 이것은 기계어에서 주소 계산으로 번역된다. 3.8.1 기본원리 자료형 T와 정수형 상수 N T A[N]; 시작하는 위치를 xA라고 표시했을 때, 이 선언은 두 가지 효과를 갖는다. 이것은 L*N 바이트의 연속적인 공간을 메모리에 할당하며, 여기서 L(바이트의 단위)은 자료형 T의 크기를 나타낸다. 새로운 식별자 A를 통해서 배열이 시작하는 위치의 포인터로 사용한다. 이 포인터의 값은 xA다. 배열의 각 원소는 0에서 N-1 사이의 정수형 인덱스를 사용해서 접근 가능하다. 배열의 원소 i는 xA ..

24.01.22 CSAPP 3.6.5 - 3.7, 복습

CSAPP 3.6.5 조건부 분기를 조건 제어로 구현하기 C에서 조건부 수식과 문장을 기계어 코드로 번역하는 가장 일반적인 방법은 조건부 및 무조건 점프를 함께 사용하는 것이다.(일부 조건문은 제어의 이동보다 데이터 이동으로 구현 할 수 있다.) GOTO문을 사용하는 것은 코드를 해독하고 디버깅하기 어렵게 할 수 있기 때문에 일반적으로 나쁜 프로그래밍 스타일이다. 3.6.6 조건부 이동으로 조건부 분기 구현하기 조건부 동작을 구현하는 전형적인 방법은 조건이 만족되면 프로그램의 한 가지 실행경로를 따르고, 아닌 경우에는 다른 경로를 따라가도록 하는 제어의 조건부 전환을 통해 이루어진다. 이 방법은 간단하고 일반적이지만 최신 프로세서들에서는 매우 비효율적일 수 있다. 또 다른 전략은 데이터 조건부 전송을 이..

24.01.21 백준 1191,5639,1197,2606,1260

백준 1191 트리 순회 트리 전위순회, 중위순회, 후위순회 전위 순회(preorder traverse) : 뿌리(root)를 먼저 방문 중위 순회(inorder traverse) : 왼쪽 하위 트리를 방문 후 뿌리(root)를 방문 후위 순회(postorder traverse) : 하위 트리 모두 방문 후 뿌리(root)를 방문 import sys n = int(sys.stdin.readline()) tree = {} for i in range(n): root, left, right = map(int,sys.stdin.readline().split()) tree[root] = [left, right] def preorder(root): if root != '.': print(root,end='') pr..

24.01.20 CSAPP 3.5-3.6.4, 트라이, 다익스트라, 플로이드 워셜, prim, union_find, kruskal, 신장트리, MST

24.01.20 CSAPP 3.5- CSAPP 3.5 산술연산과 논리연산 각 인스트럭션 클래스는 네개의 서로 다른 크기의 데이터 연산을 갖는다. 연산들은 4개의 그룹으로 나누어진다. 유효주소 적재 단항(Unary) 이항(Binary) 쉬프트(Shift) 이항연산은 두개의 오퍼랜드를 가지는 반면, 단항연산은 한개의 오퍼랜드를 갖는다. 3.5.1 유효주소 적재(Load Effective Address) 유효주소 적재 인스트럭션 leaq는 실제로는 movq 인스트럭션의 변형이다. 메모리에서 레지스터로 읽어들이는 인스트럭션의 형태를 갖지만, 메모리를 전혀 참조하지 않는다. 이 인스트럭션의 첫번째 오퍼랜드는 일종의 메모리 참조처럼 보이지만, 가리키는 위치에서 읽기를 수행하는 대신에 유효주소를 목적지에 복사한다. ..

728x90