이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

Computer Science

  • 천천히 꾸준히 조용히
[시스템 프로그래밍] 프로시저

[시스템 프로그래밍] 프로시저

2022.10.28
프로시저, 함수, 메서드.. 모두 같은 말이다. 그러니 혼용해서 사용해도 괜찮다. 함수 내부에서 다른 함수를 호출하는 방식의 코드를 접한 적이 있을 것이다. C를 공부할 때 스택메모리가 활성화돼서 함수를 호출할 때 마다 스택의 윗부분에 올리는 방식으로 작동한다고 배웠는데, 어셈블리에서는 이 내용이 어떻게 구현되는지 살펴보자. 어셈블리에서 프로시저를 다룰 때 세 가지가 처리된다. 1. 제어의 전달 함수 내부에서 다른 함수를 호출할 때, 실행 중인 함수를 잠시 멈추고 호출한 함수를 실행해야 한다. 즉, ProgramCounter를 호출한 함수의 시작주소로 설정하고 함수가 리턴될 경우를 대비해 원래 실행하던 함수의 위치도 저장한다. 2. 데이터의 전달 함수를 호출할 때 인자로 정보를 전달하고, 함수가 리턴될 ..
[시스템 프로그래밍] 어셈블리어 - 반복문

[시스템 프로그래밍] 어셈블리어 - 반복문

2022.10.24
조건문은 어셈블리어의 jX 명령어와 대응되지만, 반복문은 어셈블리어에서 대응되는 명령어가 없다. 즉 jX 명령어와 몇 가지 다른 명령어들의 조합으로 반복문을 구현해야 하는데, 이제 그 예시를 살펴보자. do-while do-while은 실행식이 무조건 한 번은 꼭 실행된다는 부분을 제외하면 while문과 같은 역할을 한다. 위의 그림은 do-while 문법을 goto 문법으로 표현한 후 어셈블리어로 변환하는 예시이다. while while문은 조건식에 따라 실행식이 한 번도 실행되지 않을 수도 있다. while문을 어셈블리어로 변환하는 예시를 살펴보자. 1. Jump to Middle goto 문법을 사용해 바로 조건식으로 이동시키고, 실행식 내부에서 goto 문법을 통해 조건식에 따라 실행식으로 이동시..
[시스템 프로그래밍] 어셈블리어 - 조건문

[시스템 프로그래밍] 어셈블리어 - 조건문

2022.10.23
어셈블리어에서 조건문을 이해하기 전 알아야 하는 지식이 있다. %rsp 레지스터에는 현재 스택의 위치를 저장하고, %rip 레지스터에는 다음 명령어를 가져올 주소를 저장하고 있으며, %rax 레지스터는 연산 시 임시로 값을 저장할 때 사용된다. CF / SF / ZF / OF 레지스터들은 각각 1비트 레지스터로, 산술 연산의 결과에 따라 값에 설정된다. (lea 명령어는 제외) 이렇듯, CPU는 내부의 다양한 레지스터들을 사용해 상태를 저장한다. 위의 1비트 레지스터들은 Condition Code로 불리고, 특정 조건을 만족시키면 1로 세팅된다. CF : Carry Flag. MSB에서 Carry가 발생하면 1로 설정된다. ZF : Zero Flag. 연산의 결과가 0이면 1로 설정된다. SF : Sig..
[시스템 프로그래밍] 어셈블리어

[시스템 프로그래밍] 어셈블리어

2022.10.13
C같은 고급 언어를 사용해 코드를 작성하면, 작성한 코드를 어셈블리어로 변환하는 과정을 거쳐 기계어 코드를 생성한다. 어셈블리어로 변환하는 과정은 컴파일러가 담당하고, 컴파일러를 통해 고급 언어로 작성한 코드를 최적화한 어셈블리어를 얻을 수 있다. 이렇게만 들으면 어셈블리어는 어차피 컴파일러가 만들어주니 배울 필요가 없다고 생각할 수 있지만, 어셈블리어를 읽을 수 있으면 컴파일러의 최적화 성능을 알 수 있고 하드웨어를 직접 제어해야 하거나 속도에 민감한 프로그램을 작성할 때 어셈블리어를 사용해야 한다. 그러니 컴파일러가 생성한 어셈블리어를 읽고 이해할 수 있는 정도를 목표로 어셈블리어를 공부하자. 어셈블리어는 기게어와 일대일로 대응되는 언어이고, 컴퓨터 구조에 따라 사용하는 기계어가 달라 기게어에 대응되..
[컴퓨터 구조] 기본 컴퓨터 프로그래밍

[컴퓨터 구조] 기본 컴퓨터 프로그래밍

2022.10.09
이제 설계한 컴퓨터가 제대로 작동하는지 증명해보자. 프로그램은 컴퓨터가 특정 업무를 처리하도록 작성된 명령어 또는 문장이고, 네 가지 종류가 있다. 1. 이진 코드 : 메모리상에 실제로 나타나는 형태의 명령어이다. 2. 8진 / 16진 코드 : 이진 코드로 작성 시 매우 많은 자릿수가 필요하기에 8진수 혹은 16진수를 사용해 자릿수를 감소시킨다. 3. 기호 코드 : 어셈블리 언어로, 각 명령어를 기호화된 이름으로 표현한다. 4. 고급 프로그래밍 언어 : C, Fortran 등.. 모든 컴퓨터는 각각의 어셈블리 언어를 가지고 있으며, 언어의 규칙은 컴퓨터 제조업체에서 정한다. 어셈블리 언어는 줄 단위로 해석된다. (Carriage-Return을 한 줄의 끝으로 간주한다) 이제 기본 컴퓨터의 어셈블리 언어를..
[컴퓨터 구조] 기본 컴퓨터의 구조와 설계

[컴퓨터 구조] 기본 컴퓨터의 구조와 설계

2022.10.04
컴퓨터의 구조는 레지스터 (하드웨어 리소스) / 명령어 집합 / 타이밍과 제어 도구들로 정의된다. 컴퓨터 명령어는 마이크로 연산을 기술한 이진 코드이고, 데이터와 함께 메모리에 저장된다. 제어 신호는 명령어를 메모리로부터 읽고 제어 레지스터에 가져다놓는다. (저장) 이후 제어 신호가 명령어를 해석해 제어 함수를 발생시켜 명령어를 실행한다. 명령어 코드는 컴퓨터가 특정 연산을 하도록 지시하는 비트 집합이다. 연산 코드 부분과 주소 부분으로 구성되고, 연산 코드는 연산을 지정하고 주소는 피연산자의 주소를 가리킨다. 메모리로부터 읽혀진 피연산자는 레지스터에 저장된 데이터와 연산을 수행한다. 여기서 연산과 마이크로 연산은 다르다. 연산 내부에 마이크로 연산을 수행하는 부분이 포함되어있다고 생각하자. 명령어 코드..
[컴퓨터 구조] 레지스터와 마이크로 연산

[컴퓨터 구조] 레지스터와 마이크로 연산

2022.10.02
레지스터에 저장된 데이터로 실행되는 동작을 마이크로 연산이라고 한다. 레지스터들의 종류를 간단하게 정리하자. MAR : Memory Address Register PC : Program Counter IR : Instruction Register R1 : Processor Register DR : Data Register 제어 명령은 위와 같은 형태로 주어진다. P는 0또는 1을 가지는 변수로 P가 1일 때 레지스터 R1의 값을 레지스터 R2로 전달하라는 의미이다. R2의 로드 입력은 제어 변수 P에 연결돼있고, 논리회로의 클럭과 동기되어 동작한다. t+1 에서 P값이 로드되고 t+1 이후 다음 상승 모서리에서 실제 전송이 발생한다. read와 write 모두 ← 연산으로 처리한다.(DR ← M[AR] ..
[컴퓨터 구조] 데이터의 표현

[컴퓨터 구조] 데이터의 표현

2022.10.02
https://13months.tistory.com/477 컴퓨터가 이진수 체계를 사용하는 이유에 대해 살펴봤다. 컴퓨터가 사용하는 데이터의 표현 방식에 대해 간단히 알아보자. 숫자는 이진수로 표현하고, 문자나 기호는 7비트의 ASCII코드를 사용해서 표현한다. 뺄셈 연산과 논리 연산 시 보수 개념이 사용된다. 컴퓨터는 이진수 체계를 사용하니, 1의 보수와 2의 보수 중 하나를 선택해서 사용하면 된다. r진법에서 (r-1)의 보수는 (r^n - 1) - N 으로 정의된다. (n은 자릿수, N은 r진법의 수) r진법에서 r의 보수는 (r^n) - N 으로 정의된다. (n은 자릿수, N은 r진법의 수) 보수에 보수를 취하면 원래 수로 돌아온다. 이진수에서 MSB(제일 왼쪽 비트)를 부호 비트로 사용해 양수와..
[시스템 프로그래밍] 정수의 산술연산과 실수의 표현

[시스템 프로그래밍] 정수의 산술연산과 실수의 표현

2022.09.29
프로그래밍 언어에는 사칙연산 말고도 여러 가지 연산이 있다. 비트 연산 두 가지 이진수를 대상으로 연산을 수행한다. & : and | : or ~ : not ^ : xor 논리 연산 && / || / ! 하던 대로 하면 된다. 시프트 연산 생각해야 할 부분이 좀 있다. x > y x비트벡터 x를 왼쪽 혹은 오른쪽으로 y만큼 밀어내는 연산이다. 왼쪽으로 1만큼 밀어내면 2를 곱한 효과를, 오른쪽으로 1만큼 밀어내면 2를 나눈 효과를 얻는다. (소멸되는 비트를 고려하지 않을 때) 논리 시프트 (Logic) : 공백을 0으로 채운다. 산술 시프트 (Arithmetic) : 공백을 가장 중요한 비트로 채운다. (첫 번째 비트) 산술 시프트는 수 체계와 연관돼있다. 순환 시프트 (circular) : 직렬 출력을..
[시스템 프로그래밍] 컴퓨터 시스템과 정보의 표현

[시스템 프로그래밍] 컴퓨터 시스템과 정보의 표현

2022.09.15
컴퓨터 시스템은 소프트웨어와 하드웨어로 구성된다. (시스템 = 소프트웨어 + 하드웨어) 가장 밑바닥에 하드웨어가 위치하고, 운영체제가 하드웨어를 관리해준다. 컴퓨터 시스템이 밑에 있고, 시스템 위에 C, Java 등으로 작성한 응용 프로그램이 올라간다. BUS / I.O / main memory / cache memory / CPU 등이 하드웨어에 속한다. BUS 버스는 하드웨어 요소들을 연결하고 데이터를 전송하는 통로 정도로 생각하면 된다. (워드 단위로 전송한다) CPU 연산장치(ALU), 제어장치 및 레지스터로 구성되어있고 컴퓨터의 두뇌 역할을 한다. CPU는 클락 펄스마다 명령 주기 (Instruction Cycle) 를 반복한다. 1. 인출 (fetch) : Program Counter에 의거해..
[HTTP] 헤더 / 쿠키와 캐시

[HTTP] 헤더 / 쿠키와 캐시

2022.08.13
헤더에는 HTTP 전송에 필요한 모든 부가정보가 들어가 있다. (메세지 바디 내용, 크기, 인증, 요청 클라이언트, 서버 정보..) 표준 헤더는 수없이 많고, 임의로 헤더를 추가할 수도 있다. 헤더는 크게 4가지로 분류할 수 있다. (실제로는 더 복잡함) 1. General 헤더 : 메세지 전체에 적용되는 정보 2. Request 헤더 : 요청 정보 3. Response 헤더 : 응답 정보 4. Representation 헤더 : 과거 엔티티 헤더에서 이름이 바뀜. 메세지 바디를 통해 표현 데이터 전달 Representation 헤더 Content-Type : 표현 데이터의 형식을 알려준다. (html, xml, json 등등.. 메세지 바디에 들어가는 내용) Content-Encoding : 표현 데이..
[HTTP] 상태코드

[HTTP] 상태코드

2022.08.12
클라이언트가 보낸 요청에 대한 처리 상태를 응답 메시지에서 상태코드를 통해 알려준다. 100번대 (Informational) : 요청이 수신되고 처리중 200번대 (Successful) : 요청 정상 처리 300번대 (Redirection) : 요청이 완료되려면 추가 행동이 필요 400번대 (Client Error) : 클라이언트 오류 500번대 (Server Error) : 서버 오류 200번대 200 OK : 요청 성공을 의미함 201 Created : 요청에 성공하고 새로운 리소스가 반환됨 (POST 메서드를 사용한 경우 URI도 함께 반환) 202 Accepted : 요청이 접수됐지만 처리되진 않음 204 : No Content : 요청을 성공적으로 수행했지만 본문에 보낼 데이터가 없음. (임시저..
  • 최신
    • 1
    • ···
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 다음

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (622)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (103)
      • Machine Learning (28)
      • Operating System (18)
      • Computer Network (23)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (0)
      • Computer Security (0)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (15)
    • Logs (6)
    • 낙서장 (27)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바