Computer Science
[UPL] 고차원 함수와 일차원 함수
[UPL] 고차원 함수와 일차원 함수
2025.04.18이전에 정의한 언어인 VAE에 함수를 추가해 F1VAE를 정의해보자 (First Order Function and VAE) 여기서 함수는 수학에서 가져온 용어지만, 수학과는 다르게 같은 값에 대해 다른 출력이 있을 수 있다. (Side Effect)Pure Functional Language는 함수에서도 Side Effect가 없지만.. 우선 일반적인 프로그래밍 언어에서는 함수 호출에 대한 Side Effect가 발생할 수 있다. Higher Order Function - 고차원함수로 함수를 인자로 받거나 반환할 수 있다. (1등 시민)First Order Function - 일차원함수로 함수를 인자로 받을 수 없고, 반환값으로 사용할 수도 없다. (2등 시민) 지금 정의하는 F1VAE는 First O..
[Data Communication] 물리 계층에서의 다중화
[Data Communication] 물리 계층에서의 다중화
2025.04.16여러 사람이 동시에 이야기하면 같은 주파수, 같은 시간에 간섭이 발생해 무슨 말을 하는지 알아듣기 어렵다. 마찬가지로.. 여러 개의 전화기나 컴퓨터도 동시에 서로 같은 전송 매체를 통해 통신하려 하면, 신호가 겹치고 충돌이 발생해 서로의 데이터를 제대로 수신할 수 없다. 케이블, 무선, 광섬유 등 통신 채널은 한정되어있고, 여러 기기가 동시에 사용하려면 한 채널에서 여러 데이터를 보내는 기술이 필요하다.이 기술을 Multiplexing이라고 부르고, 송신 측에서는 Multiplexing으로 데이터를 전송했다면 수신 측에서는 Demultiplexing으로 합쳐진 데이터를 개별 데이터로 분리하는 작업을 수행해야 한다. TDM : 시간 단위로 나눠서 각각 전송하는 기법을 의미한다.FDM : 서로 다른 주파..
[Operating System] Deadlock and Starvation
[Operating System] Deadlock and Starvation
2025.04.13데드락은 두 개 이상의 프로세스가 절대 발생할 수 없는 이벤트를 무한정 기다리는 상황을 의미한다. 프로세스 P는 A자원을 가지고 있고, B자원을 운영체제에게 요청했다.프로세스 Q는 B자원을 가지고 있고, A자원을 운영체제에게 요청하는데... 운영체제는 현재 B자원이 사용할 수 없는 상태이기에 프로세스 A를 Block상태로 변경시키고, 프로세스 B도 같은 이유로 Block상태로 변경시킨다. x축은 프로세스 P가 실행하는 시간을, y축은 프로세스 Q가 실행하는 시간을 의미한다.나머지 루트로 진행하는 경우 아무 문제가 발생하지 않는데.. 3번, 4번 루트로 실행되는 경우 데드락이 발생한다. 한 사람이 P와 Q 프로그램을 작성한다면 데드락이 발생하지 않는 방식으로 작성하겠지만.. P를 작성하는 사람..
[UPL] Arithmetic Expression 정의
[UPL] Arithmetic Expression 정의
2025.04.08Syntax와 Semantics를 정의해 간단한 언어인 Arithmetic Expression을 정의해보자.AE는 정수 사이의 덧셈과 뺄셈으로 구성된다. Concrete Syntax BNF 를 사용해서 정의한다.개발자가 직접 작성하는 코드의 구조와 모양으로, 실제로 코드에서 보게 되는 문자 단위의 문법을 의미한다.파싱에서 중요한 역할을 수행하고, 언어의 문법을 정의할 때 첫 단계로 사용된다. Abstract Syntax프로그램을 나타내는 트리 형태의 구문구조이다.프로그램은 여러 개의 구문으로 구성되고.. 각 구문은 또 세부 구문으로 구성된다. 파서가 이미 파싱해서 AST를 줬고.. 이 AST는 컴파일러나 인터프리터가 사용한다.즉, Concrete Syntax를 파싱하면 Parse Tree가..
[Operating System] Semaphore
[Operating System] Semaphore
2025.04.08한 프로세스가 임계 구역에 접근할 때 CPU Interrupt를 비활성화하면 현재 실행 중인 코드가 중단되지 않아 Critical Section을 보호할 수 있다. 원래는 CPU는 명령어를 실행하고 Interrupt가 발생했는지 매번 확인하는데, Atomic Operation을 실행할 때는 Interrupt를 비활성화한다.이 때 Interrupt를 아예 무시하는건 아니고, Atomic Operation이 마무리 된 후에 그 동안 발생한 Interrpt를 수행하는 방식으로 동작해 처리를 뒤로 미룬다고 생각하자. 시스템 성능 저하 문제 때문..사용자 코드를 Atomic Operation으로 실행하는건 좋지 않지만, Entry Section을 Atomic Operation으로 다루는건 합리적이다. 운영체제는..
[UPL] Syntax & Parsing
[UPL] Syntax & Parsing
2025.04.04프로그래밍 언어는 문자열의 집합이고, 프로그래밍 언어로 작성된 프로그램은 문자열이라고 생각할 수 있다.그렇다고 아무 문자열이나 프로그래밍 언어가 될 수 있는 건 아니다. 특정 문법에 부합해야 프로그래밍 언어가 될 수 있다. 문자열 s가 프로그래밍 언어인지 판단하는 함수 L(G) 를 생각해보자.s가 L(G)의 집합에 포함된다면 s는 프로그래밍 언어라고 할 수 있다. 위의 Chomsky Hierarchy는 언어의 표현력을 나타낸다.사실상 튜링 머신은 존재하지 않고 Regular Language는 프로그래밍 언어를 정의할 때 표현력이 부족해 독립적으로 사용되지 않으니 프로그래밍 언어의 정의는 두 가지로 구분된다. 오토마타는 문자열 s가 L(G) 집합에 포함되는지를 판단한다. Lemail 언어를 집합으로..
[Data Communication] 물리 계층에서의 데이터 전송
[Data Communication] 물리 계층에서의 데이터 전송
2025.04.02디지털 통신은 컴퓨터가 이해할 수 있는 비트를 주고받는 일인데.. 소리나 영상 같은 아날로그 데이터를 전송하려면 데이터를 비트로 변환해야 한다. 이 과정에서 물리 계층이 개입되고, 이 계층은 전기 신호 / 소리 / 빛 등 아날로그 신호를 비트로 표현하는 역할을 수행한다.물리 계층에서는 유선 케이블을 사용할 때와 무선랜을 사용할 때 비트를 변환하는 방식이 다르다. 유선 케이블을 사용할 때는 라인코딩을, 무선랜을 사용할 때는 사인파를 조작한다.무선에서도 라인코딩을 전혀 사용하지 않는 건 아니지만, 통신 특성 상 유선에서는 디지털 비트를 다른 디지털 신호로 변환하는 라인코딩이 중요하다. 주파수는 두 가지 방식에서 모두 사용하지만.. 무선랜에서 좀 더 중요하게 다뤄진다. 아날로그에서의 대역폭 - 주파수 범위 ..
[Data Communication] Layer Packet Signal
[Data Communication] Layer Packet Signal
2025.04.01브라우저를 통해 https://www.naver.com/ 으로 접속할 때 무슨 일이 발생할까? 먼저 운영체제가 로컬 DNS 캐시를 확인하고 히트된 경우 해당 IP주소를 바로 사용한다.히트되지 않은 경우 DNS 서버에 질의를 보내는데, 이 때 무선 랜카드와 무선 공유기를 사용한다. (유선의 경우 이더넷 케이블) 무선 공유기(AP)는 와이파이 신호를 받아 이더넷 패킷으로 변환하고 인터넷 라우터로 전달한다.공유기는 NAT로 내부 IP를 공인 IP로 변환해준다.집 인터넷 라우터는 공유기로부터 받은 요청을 ISP 네트워크로 전달한다. 요청 데이터는 광케이블을 통해 ISP 네트워크로 전송되고, ISP 네트워크에서 라우터가 패킷을 분석하고 인터넷으로 보내는데, 이 때 스위치는 패킷을 빠르게 전송하기 위해 적절..
[Operating System] 프로세스와 동시성 제어
[Operating System] 프로세스와 동시성 제어
2025.03.28멀티쓰레드와 멀티프로세싱 환경에서는 여러 요소들이 동시에 실행되고, 운영체제는 동시성 관련 문제를 해결해 줘야 한다. Race Condition - 두 요소가 동시에 공유 데이터를 조작할 때 실행 순서에 따라 결과가 달라지는 현상을 말한다.Mutual Exclusion - 한 순간에 하나의 요소만 공유 자원에 접근할 수 있도록 보장해 Race Condition을 방지한다.Critical Section - 여러 요소가 동시에 접근하면 안 되는 공유 자원에 접근하는 코드 블록 자체를 의미한다.Starvation - 프로세스가 자원을 기다리지만 다른 프로세스가 자원을 반환하지 않아 무한히 기다리는 상황을 말한다.Deadlock - 여러 프로세스가 서로 자원을 점유해 상대방이 작업을 마칠 때 까지 기다리며 무한..
[UPL] 함수형 언어 OCaml
[UPL] 함수형 언어 OCaml
2025.03.21Objective Caml. Caml 언어는 ML family에 속하는 프로그래밍 언어로, 안전한 소프트웨어 개발과 교육 용도로 활용된다. Functional Programming Language - 함수를 일급 객체로 사용해 변수처럼 다룰 수 있다.Strongly Typed Language - 자바처럼 컴파일 시점에 모든 변수와 표현식의 타입이 결정된다.Pattern Matching - Case 구문의 상위 호환으로, 값의 구조에 따라 조건부 분기를 간결하게 구현할 수 있다.Type Inference - 타입 시스템이 변수와 표현식의 타입을 추론해 코드의 가독성을 높인다.Polymorphism - 함수와 데이터 타입이 여러 다른 타입에서도 재사용 할 수 있다. 명시적인 main 함수가 없고, 소스코드를..
[Operating System] Process Termination / Thread
[Operating System] Process Termination / Thread
2025.03.19CPU 에러, signal, 부모 프로세스 관련 문제 등으로 프로세스가 동작을 마치면 exit System Call을 호출해 terminated 상태로 변한다.이 때 release는 프로세스가 실행될 때 사용했던 컴퓨팅 리소스를 반환함을 의미한다.terminated 상태인 프로세스는 아직 제거된 상태는 아니고, wait System Call이 호출될 때 제거된다. 사용량 및 통계 정보를 저장하는 PCB만 남아있는 상태이다. exit System Call을 호출하면 해당 프로세스는 User Mode에서 Kernel Mode로 변하게 된다.이 때 PCB를 제외한 test.c의 모든 컴퓨팅 자원을 회수하는데, 이 PCB를 통해 해당 프로세스가 terminated 상태임을 확인한다. PCB의 State ..
[Operating System] Process (Context, Creation, Switch)
[Operating System] Process (Context, Creation, Switch)
2025.03.17Process Context는 프로세스가 실행될 때 필요한 컴퓨터 내 리소스의 집합을 의미한다. User Context운영체제가 직접 만들지 않고, 개발자가 작성한 프로그램이 만들어낸다. 실행 중인 프로그램의 명령어 (Code Segment)전역 변수, 정적 변수 등 프로그램이 끝날 때 까지 유지되는 데이터 (Global Data)함수 내부에 선언된 지역 변수들이 저장되는 LIFO 구조 공간 (User Stack) System Context운영체제가 직접 관리한다. Kernel Stack - 커널 모드에서 실행될 때 함수 호출과 시스템 콜을 처리하기 위한 스택으로, 프로세스마다 독립적이다.Process Control Block - 프로세스의 중요한 정보를 저장하는 자료구조로 프로세스의 상태, pid, 메..