이번에 배울 시그널은 특정 시스템에 한정된 용어가 아닌 운영체제 전반에서 쓰이는 용어이니 잘 알아두자. 우선 이전에 배운 것들을 다시 상기해보자. 우리가 지금까지 배운 컴퓨터 시스템 안에서의 상호작용 Assembly language : 명령어 사이의 상호작용 Procedure calls : 함수 사이의 상호작용 Linking : 오브젝트 파일 사이의 상호작용 Exceptions : OS와의 상호작용 (application -> OS) 결론부터 말하자면, 시그널은 application과의 상호작용을 의미하는데, 이는 application에 제어권을 넘긴다는 것을 의미한다. 말은 어려운 것 같지만 이후 나올 내용은 앞에서 배운 어떤 것보다 우리에게 친숙하게 느껴질 것이니 끝까지 잘 공부해보자. 시그널이란? ..
분류 전체보기
본 내용은 컴퓨터 아키텍처 - 컴퓨터 구조 및 동작 원리 책(한빛아카데미)을 바탕으로 정리하였습니다. Index 1. 데이터의 개요 2. 정수 3. 실수 4. 비수치 데이터 5. 디지털 논리회로 1. 데이터의 개요 우리는 코드를 짤 때마다 항상 어떤 데이터를 쓸지 고민하게 된다. 예를 들자면, 프로그래밍 문제에서 입력 값이 21억이 넘어간다면 long long, 실수형이라면 float, 문자열이라면 string처럼 말이다. 컴퓨터는 이러한 데이터들을 처리하는 장치이다. 하지만 모든 형식의 데이터를 표현할 수 없기 때문에 형식이 제한되어있다. 1.1 데이터의 종류 컴퓨터가 사용하는 데이터는 위 그림과 같이 수치 데이터와 비수치 데이터로 구분할 수 있다. 간단히 다음과 같이 정리할 수 있다. 수치 데이터는 ..
대회 링크 : atcoder.jp/contests/abc182 A - twiblr [문제] twiblr 라는 sns 에서 추가할 수 있는 최대 팔로잉 수를 구하라. [풀이] 문제에서 나온 그대로 A, B가 주어졌을 때 (2 * A + 100) - B 를 구하는 간단한 문제입니다. [코드] 1 2 3 4 5 6 7 8 9 10 11 #include using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); int a, b; cin >> a >> b; cout x; arr[y-1][x-1].cmd = 2; } for (int i = 0; i
벌써 예선을 치른 지 1달이 다 되어가지만.. 더 늦으면 완전히 까먹어버릴까 봐 여기 기록을 해둬야겠다. 보통 이런건 한 7문제씩 푼 사람들이 쓰지만 ㅠㅠ 상승 곡선을 그리기 위해 올해부터 적는다! 아직 2학년이라 올해 처음 acm에 참가하였지만, 우리 학교가 워낙 알고리즘 불모지이기 때문에 학교에서 참가한 팀은 우리 팀 밖에 없어 우리가 자동으로 학교 1위 팀이 되었다. (해당 과목 교수님은 정말 대단하신데 ㅠㅠ) 덕분에 모자란 실력에도 불구하고, 본선을 목표로 공부했고 팀원들 모두 어느 정도 본선은 갈 것이라 생각했다. (결과는 뒤에 나와요 ㅎㅎ) 잠깐 참가하게 된 과정을 말해보자면.. 나는 작년에 PS(Problem solving)를 처음 접했고, 작년 2학기에 c++을 배우고 겨울부터 본격적으로 ..
이번엔 ARM 어셈블리 코드로 작성한 파일을 디버깅하는 방법에 대해 알아보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @ suhwan++20201108 @ debug practice .text _start: .global _start mov r1, #0 loop: cmp r1, #10 bge exit add r1, r1, #1 b loop exit: mov r0, #0 mov r7, #1 swi 0 .end cs 먼저, 이번에 사용할 코드입니다. 아주 단순하게 1부터 10까지 r1을 +1씩 증가시키고, 10이 되면 프로그램을 종료하는 코드입니다. 1. 디버그 옵션 설정 -> 디버그 옵션은 as(오브젝트 파일로 변환)할 때 "-g" 옵션을 설정하면 ..
이번엔 미리 버퍼에 저장해둔 문자열을 출력해봅시다! 순서는 다음과 같습니다. 1) 문자열의 주소(맨 앞 포인터)를 레지스터에 담습니다.(adr 명령어 사용) 2) 포인터를 하나씩 증가시키면서 바이트 단위로 로드해서 출력합니다. 3) 위 과정을 문장이 끝날 때까지 반복합니다. 소스 코드 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 @ suhwan++20201108 @ write sentence .text _start: .global _start adr r3, msg @ r3
본 포스팅에서는 sp(stack pointer)를 이용해 항상 .data 밑에다가 자잘하게 써왔던 버퍼를 대체하는 것을 보여드립니다! 1. 기존 버퍼 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @ suhwan++20201108 @ system call test .text _start: .global _start @ sys_read (fd, pstr, len); @ r0 r1 r2 mov r0, #0 @ fd
arm assembly 코드를 짜면서 자주 사용하지만 항상 헷갈리는 system call에 대해 정리해봅니다. 코드에 대한 대략적인 설명은 @(주석)에 쓰여 있습니다! 0. 기초 아래 코드에서 공통되는 내용입니다. fd File Descriptor의 약자이며, 리눅스에서 프로세스가 파일을 다룰 때 사용하는 개념으로, 간단히 파일에 접근을 어떻게 할 것인지 지정하는 역할을 합니다. pstr 포인터입니다. 보통 버퍼의 앞 부분을 가리키는 데에 사용하며, 주소 값을 갖습니다. len 버퍼의 길이를 의미합니다. swi swi(software interrupt)는 어떤 장치가 다른 장치의 일을 잠시 중단시키고 자신의 상태 변화를 알려 주는 것입니다. 아래 코드에서는 잠깐 멈춰 입출력 혹은 종료를 하도록 합니다. ..
문제 링크 : https://www.acmicpc.net/problem/1946 문제 분류 - 그리디 알고리즘 풀이 우선 문제를 읽고, 지원자의 숫자 N의 제한이 10만이라는 점을 보고 빠르게 O(n^2)로 모든 지원자들을 계속해서 비교해나가는 풀이는 포기했다. 그렇다고 O(nlgn)의 방법으로 이분탐색을 하자니.. 딱히 절반 절반 줄여나갈 포인트가 생각이 안 났고 그다음 생각난 것이 아래와 같은 풀이이다. 먼저, 입력에서 각 지원자들의 성적 순위가 주어졌기 때문에 본능적으로 무언가 정렬을 해야 할 듯하다. 따라서 정렬을 하고 보니 두 성적 중 아무 성적이나 1위를 하고 있는 신입 사원은 어떻게 뽑든 반드시 선발되기 마련이다. 만약 성적이 (1, x)인 신입 사원이 선발이 되지 않았다면, 선발될 수 있는..
그리디 알고리즘(Greedy Algorithm)은 "탐욕적인"이라는 뜻의 greedy에서 유래된 알고리즘이다. 다른 말로 "욕심쟁이 기법" 이라고도 부르는데 만약 여러 노드를 갖는 그래프에서 A노드 -> B노드까지의 경로를 탐색하려 할 때 모든 경로를 고려하지 않고 단지, 현재의 위치(노드)에서 가장 최적의 경로(예를 들면 에지의 가중치가 작은) 를 도착지까지 매 순간마다 가장 좋은 방법만을 선택하는 방법이다. 다익스트라 알고리즘도 그리디 알고리즘의 한 예시인데 간단히 설명하자면, 한 노드를 시작점으로 출발해 목적지에 연결될 때 까지 현재 연결된 노드로부터 연결된 에지들의 가중치 중 최소만을 선택하는 방법을 말한다. (사이클이 생기지 않는 선에서) 만약 위 그림에서 노드 1->6 까지의 최단 거리를 구하..
우리가 보통 행렬의 곱셈을 구현하기 위해서는 n x n 행렬이 A, B가 있을 때 주어진 행렬의 모든 원소(n^2 가지)에 대해 A행렬의 가로, B행렬의 세로를 곱해줘야 하기 때문에 O(n^3) 번의 연산이 필요하게 된다. 이렇게 되면 n이 조금만 커져도, 또는 거듭제곱의 수가 조금만 커져도 필요한 연산의 수가 매우 크게 증가하기 때문에 연산의 수를 줄이는 알고리즘이 필요하다. 우리는 이 문제를 분할 정복(divide & conquer)로 해결할 수 있는데 예를 들어 행렬 A를 m번 거듭 제곱한다 하면, A^(m) = A^(m/2) * A^(m/2)로 나눌 수 있다는 점을 이용한다. (행렬의 곱셈법칙에 따라서) 만약 A^8 를 구하기 위해 곧이곧대로 A를 7번 곱하게 되면 연산은 총 7 * n^3번 해야..
본 내용은 Computer networking : a top-down approach 책을 바탕으로 정리하였습니다. Index 1. 링크 가상화 : MPLS 2. 데이터 센터 네트워킹 3. 총정리 드디어 프로토콜 스택의 마지막 포스팅이다! 이 다음 포스팅부터는 1~15까지 배운 내용을 토대로 예시 문제를 통해 복습해볼 예정이다. 1. 다중 프로토콜 레이블 스위칭 : MPLS 다중 프로토콜 레이블 스위칭(Multiprotocol Label Switching, MPLS)은 가상회선 네트워크의 주요 개념인 고정 길이 레이블을 도입함으로써 라우터의 전달속도를 향상시키기 위해 발전해왔다. MPLS의 목표는 고정 길이 레이블과 가상회선을 기반으로 데이터그램을 전달하기 위해서 데이터그램을 선택적으로 레이블링해서 라우..