Computer Science
System Call
시스템 콜은 사용자나 응용 프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스 이다. 운영체제는 커널이 제공하는 서비스를 시스템 콜을 이용해 제한함으로써 컴퓨터 자원을 보호한다. 예) 프로세스 생성/종료, I/O 작업등이 있다. (fork, exec, exit, wait) Fork() 새로운 프로세스를 생성할 때 사용한다. Wait() child 프로세스가 종료될 때까지 기다리는 작업 (Wait를 통해서 child의 실행이 끝날 때까지 기다려준다. parent가 먼저 실행되더라도, wait()는 child가 끝나기 전에는 return하지 않기때문에 반드시 child가 먼저 실행된다. exec() 단순 fork는 동일한 프로세스의 내용을 여러번 동작할 때 사용한다. child에서는 parent와 ..
인터럽트(Interrupt)
정의 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요하다고 CPU에 알리는 것 지금 수행 중인 일보다 더 중요한 일(입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다. 주 프로그램이 실행되다가 인터럽트가 발생했다. 현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 저장한 뒤에 인터럽트 서비스 루틴으로 간다. 인터럽트 처리가 완료 되었다면, 마지막에 실행되던 주소로 점프하고, 주 프로그램을 실행한다. 이때, 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해주어야 될 것이다. 이러한 방식을 폴링이라고한다. 폴링 대상을 ..
[네트워크 기초] 네트워크를 만드는 것
🐯 네트워크의 기초를 가볍고 빠르게 훑어본 다음 심도 있게 공부해 볼 예정이다! 📚 그림으로 배우는 네트워크 원리를 읽고 정리합니다! 1. 네트워크를 구성하는 기기 라우터 레이어 2 스위치 레이어 3 스위치 자세한 설명은 포스팅 예정 (각 네트워크 기기의 자세한 동작 메커니즘) 네트워크들의 기기는 모두 데이터를 전송한다. 데이터 전송 처리는 주로 다음 세 단계로 이루어진다. 데이터 수신 : 전기 신호 등 물리적 신호로 변환된 데이터를 원래 디지털 신호 (0, 1)로 되돌린다. 데이터를 보낼 곳을 결정 : 데이터에 부가된 제어 정보를 참조하여 전송할 곳을 결정한다. 데이터 전송 : 데이터를 물리적인 신호로 변환해서 내보낸다. 필요하면 제어 정보를 고쳐쓴다. 네트워크 기기의 차이는 2번째 단계에 있다. 데이..
[네트워크 기초] 네트워크의 기본
🐯 네트워크의 기초를 가볍고 빠르게 훑어본 다음 심도 있게 공부해 볼 예정이다! 📚 그림으로 배우는 네트워크 원리를 읽고 정리합니다! 1. 무엇을 위해서 네트워크를 이용할까? 네트워크란 무엇일까? 넓은 의미에서 네트워크 : 물류, 교통, 인맥 등 포함되고, 그물 처럼 구성된 시스템을 나타냄 좁은 의미에서 네트워크 : 컴퓨터끼리 데이터를 주고 받는 시스템인 컴퓨터 네트워크 네트워크를 이용하는 목적은 무엇일까? 정보를 수집한다. 문서 파일 등을 공유한다. 효율적으로 커뮤니케이션 한다. 출장 신청이나 정산 등의 업무를 처리한다. 2. 누가 이용할 수 있는 네트워크인가? 네트워크의 분류 사용자를 제한하는 사설 네트워크 : 사내 네트워크나 가정 네트워크처럼 접속할 수 있는 사용자를 직원이나 가족으로 한정하는 네트..
프로세스 & 스레드 (Process & Thread)
프로세스 실행중인 프로그램, 현대의 컴퓨팅 시스템에서 작업의 단위 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다. 프로세스의 현재 활동의 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타낸다. 프로세스의 메모리 배치는 일반적으로 여러 섹션으로 구분되며 아래와 같다. 텍스트 섹션 : 실행 코드 데이터 섹션 : 전역 변수 힙 섹션 : 프로그램 실행 중에 동적으로 할당되는 메모리 스택 섹션 : 함수를 호출할 때 임시 데이터 저장장소 (함수 매개변수, 복귀 주소 및 지역 변수) 텍스트 및 데이터 섹션의 크기는 고정되기 때문에 프로그램 실행 시간 동안 크기가 변하지 않는다. 그러나 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 줄어들거나 커질 수 있다. 함수가 호출될 때마다 함수 매개변..
인덱스
인덱스 인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료구조이다. 테이블 내의 1개의 컬럼 혹인 여러 개의 컬럼을 이용하여 생성될 수 있다. 🐶 장점 : 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있음, 전반적인 시스템의 부하를 줄일 수 있음 🐱 단점 : 인덱스를 관리하기 위해 데이터베이스의 약 10%에 해당하는 저장공간이 필요함, 인덱스를 관리하기 위해 추가 작업이 필요함, 인덱스를 잘못 사용할 경우 오히려 승능이 저하되는 역효과 발생 가능 인덱스를 사용하는 것만큼이나 생성된 인덱스를 관리해주는 것도 중요하다. 그렇기 때문에 사용하지 않는 인덱스를 사용하면 좋은 경우 규모가 작지 않은 테이블 INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼 J..
관계 데이터 연산
관계 대수와 관계 해석의 차이? 관계 대수와 관계 해석은 원하는 결과를 얻기 위한 처리 절차를 얼마나 자세히 기술하느냐에서 큰 차이를 보인다. 관계 대수 : 원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 절차 언어 관계 해석 : 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어 관계 대수와 관계 해석을 공부하는 이유? 새로운 데이터 언어가 제안되면 해당 데이터 언어의 유용성을 검증해야 하는데 검증의 기준 역할을 하는 것이 관계 대수와 관계 해석임. 기술할 수 있는 모든 질의를 새로 제안된 데이터 언어로 기술할 수 있으면 관계적으로 완전하다고 하고 이를 통해 해당 언어가 어느정도 검증됐다고 판단함. 그중 관계 대수에 대해서 알아볼 예정이다. 관계 대수 관계 ..
연결리스트
연결리스트는 차례로 연결된 노드를 표현해주는 자료구조이다. 배열과 달리 특정 인덱스를 상수 시간에 접근할 수 없다. linked list 장점 : Linked list의 길이를 동적으로 조절 가능, 데이터의 삽입과 삭제가 쉬움 linked list 단점 : 임의의 노드에 바로 접근할 수 없음, 다음 노드의 위치를 저장하기 위한 추가 공간이 필요함, Cache locality를 활용해 근접 데이터를 사전에 캐시에 저장하기가 어려움, 거꾸로 탐색하기 어려움 Runner 기법 Runner(부가 포인터라고도 함)는 연결리스트 문제에서 많이 활용되는 기법으로 연결리스트를 순회할 때 두 개의 포인터를 동시에 사용하는 것이다. 이때 한 포인터가 다른 포인터보다 앞서도록 하는데 앞선 포인터가 따라오는 포인터보다 항상 ..
관계 데이터 모델
관계 데이터 모델의 기본 용어 1. 속성(attribute) : 릴레이션의 열, 해당 파일의 필드에 대응하는 개념 2. 튜플(tuple) : 릴레이션의 행, 해당 파일의 레코드에 대응하는 개념 3. 도메인(domain) : 모든 값의 집합을 해당 속성의 도메인 (Integer, Varchar(10)과 같이 값이 가질 수 있는 범위 및 집합) 4. 널 값 : 릴레이션에 있는 특정 튜플의 속성 값을 모르거나, 적합한 값이 없는 경우 null이라는 특별한 값을 사용할 수 있음 5. 차수 : 하나의 릴레이션에서 속성의 전체 개수, 모든 릴레이션은 최소 1 이상의 차수를 유지해야함, 일반적으로 자주 변하지 않는다는 정적인 특징 6. 카디널리티 : 하나의 릴레이션에서 튜플의 전체 개수, 일반적으로 자주 변한다는 동..
운영체제란?
왜 운영체제를 공부하는가? 거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고 효율적이며 효과적이며 안전한 프로그래밍에 중요하기 때문이다. 운영체제란 무엇인가? 컴퓨터의 하드웨어를 관리하는 소프트웨어다. 운영체제는 또한 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다. 운영체제가 할 일 1. 사용자 관점 : 사용되는 인터페이스에 따라 달라진다. 한 사용자가 자원을 독점하도록 설계되었으며 목표는 사용자가 수행하는 작업을 최대화하는 것, 이러한 경우 운영체제는 대부분 사용의 용이성을 위해 설계되고 성능에 약간 신경을 쓰고 다양한 하드웨어와 소프트웨어 자원이 어떻게 공유되느냐의 자원의 이용에는 전혀 신경을 쓰지 않음 2. ..
해시 테이블
해시 테이블은 컴퓨팅에서 키를 값에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료구조이다. 해시 테이블의 시간 복잡도는 O(1)이다. 키와 값을 해시 테이블에 넣을 때 거치는 과정 키의 해시 코드를 계산 해시 코드를 이용하여 배열의 인덱스를 구함 배열의 각 인덱스에 키와 값으로 이루어진 연결 리스트가 존재 해시 함수의 두가지 성질 입력 원소가 해시 테이블 전체에 고루 저장되어 있어야 함 계산이 간단해야 함 ⭐️ 첫번째 성질이 중요: 이 성질을 잘 만족해야 서로 다른 두 원소가 한 주소를 놓고 충돌할 확률이 작아짐 해시 함수를 만드는 두 가지 방법 나누기 방법 : 해시 테이블 크기보다 큰 수를 해시 테이블 크기 범위에 들어오도록 수축시킴 h(x) = x mod m ⭐️ 여기서 m은 테이블의 크기..