커널 모델과 프로세스CPU는 사용자 모드와 커널 모드 중 하나에서 동작한다. 비로 두 개 이상의 모드를 지원하는 CPU도 존재하지만, 표준 유닉스 커널은 커널 모드와 사용자 모드만 사용한다. CPU는 사용자 모드와 커널 모드 간 전환하는 명령어를 제공하고, 프로그램은 대부분의 시간을 사용자 모드에서 작동한다. 커널이란 프로세스의 관리자이다. 커널의 여러 루틴은 프로세스를 생성하고 제거하고 동기화한다. 프로세스가 시스템 콜을 통해 커널 서비스를 이용할 수 있도록 한다. 유닉스 시스템에서는 커널 스레드라 하는 몇 가지의 특권 프로세스가 있다. 이들은 커널 모드에서 실행되고, 사용자와 상호 작용하지 않으며, 시스템이 작동하는 동안 쭉 살아 있다. 커널 루틴이 호출되는 경우는 여러가지가 존재한다. 프로세스가 ..
전체 글
푸더기의 다사다난한 블로그입니다파일 시스템사용자가 파일이나 디렉토리에 접근한다는 것은, 사용자는 하드웨어 장치의 데이터에 실제로 접근한다는 것이다. 파일 시스템은 사용자 수준에서 하드디스크 파티션의 물리적인 구조를 볼 수 있게 해준다. 사용자 모드에서 파일 시스템을 통해 파일을 다루고자 하면 실제 파일을 다루는 작업은 커널 모드에서 수행하게 된다. 이를 위해 유닉스 시스템에서는 여러 시스템 콜을 정의하였다. 파일 열기fd = open(path, flag, mode)프로세스는 열린 파일에만 접근할 수 있다. 파일을 열기 위해서, 프로세스는 위 시스템 콜을 호출한다. 세 매개변수는 각각 열 파일의 경로, 파일을 어떻게 열 것인지(읽기 쓰기 등), 새로 생성할 파일의 접근 권한을 의미한다. 이 시스템 콜은 open file 객체를 생성..
파일유닉스에서, 파일이란 일련의 바이트로 이뤄진 무언가이다. 즉, 커널은 파일의 내용을 신경쓰지 않는다. 사용자 관점에서, 파일은 트리 구조로 이루어진 이름 공간으로 조직화된다. 루트 /를 기반으로, /와 널문자인 \0을 제외한 일련의 아스키 문자로 파일 및 디렉토리 명이 구성된다. 같은 디렉토리에서는 이름이 서로 달라야 하지만, 다른 디렉토리에서는 같은 이름을 사용해도 된다. 유닉스에서 각 프로세스는 현재 작업 디렉토리와 연계되어 있다. 이 것은 픟로세스의 실행 컨텍스트에 속하고, 프로세스가 현재 사용하는 디렉토리를 가리키게 된다. 경로명은 슬래시 / 로 시작하면 그 경로명은 시작 지점이 루트 디렉토리기 때문에 절대 경로라 한다. 그렇지 않다면 상대 경로이다. 파일명을 지정할 때, . 이나 ..을 사용..
OS에 대하여운영체제란 어떤 컴퓨터 시스템이든 포함되어 있는 기본적인 프로그램 집합이다. 이 집합에서 가장 중요한 프로그램을 커널이라 한다. 커널은 시스템을 부팅할 때 RAM으로 로드되며, 시스템이 동작하는 데에 필요한 중요한 여러 절차를 포함한다. 이 밖의 프로그램은 비교적 덜 중요한 유틸리티로, 시스템의 본질적인 형태, 성능은 커널에 의해 정해진다. 따라서 본 카테고리의 글에서는 운영체제와 커널을 같은 뜻으로 사용하려 한다. OS에는 무엇이 필요한가운영체제는 다음 두 가지를 구현해야 한다. 1. 하드웨어 구성 요소와 상호 작용 하여 하드웨어 플랫폼에 들어 있는 저수준의 프로그래밍 가능한 모든 요소의 서비스2. 컴퓨터 시스템에서 돌아가는 응용프로그램을 위한 실행 환경 제공 MS 도스와 같은 운영체제는..
개요C언어를 사용한다는 가정하에 쓰인 글이다. 비트 연산 및 유니온과 같은 작은 데이터를 효율적으로 다룰 때 쓰이는 기본적인 테크닉을 요약하려고 쓰여졌다. 임베디드 SW에서는 보통 1바이트, 즉 8비트 안에서도 여러 정보를 담아서 보내는 경우가 많다. 예를 들어, 어느 한 비트에서 1이라면 어떤 한 모듈을 켜고, 0이라면 끄라는 명령을 보낼 수 있다. 컴퓨터는 1워드(일반적인 범용 컴퓨터에서 8비트, 임베디드에서는 4비트인 경우도 많다) 단위로 연산을 하기에 이러한 여러 명령을 한 번에 보낼 상황이 잦다. 비트 기본 연산자료형이 4bit라는 가정 하에 쓰여졌다.&두 비트가 모두 1일 때 1로 설정 1101 & 0110 => 0100|두 비트 중 하나 이상이 1일 때 1로 설정1000 | 0100 => 1..
개요Sense-Compute-Control 패턴은 임베디드 시스템에서 널리 사용되는 설계 패턴이다.시스템이 외부 환경으로부터 데이터를 수집하고, 이를 처리한 뒤 그 결과를 바탕으로 적절한 제어 동작을 수행하는 일련의 작업 흐름을 말한다. 이 패턴은 물리적인 세상과 상호작용하는 시스템을 설계할 때 주로 사용되고, 세 가지 주요 단계로 구성된다. 주요 단계Sense (감지)시스템이 외부 환경으로부터 데이터를 수집하는 단계이다. 이 단계에서는 다양한 센서를 사용해서 온도, 압력과 같은 물리적 매개변수를 측정한다. 이러한 데이터는 아날로그 또는 디지털 형태로 수집되고 시스템의 다른 모듈로 전달된다. Compute (연산)감지한 데이터를 기반으로 연산을 수행하는 단계이다. 센서로부터 수집된 데이터를 분석, 필터..
출제 배경ZOAC 2023에서 출제한.. 뭐랄까 대회에서 나오면 안되는 문제를 내버렸다. 삼성 코테 A~B번에 나올 법한 문제로, 실수하기 좋은 구현 문제이다. 그래도 입력 범위가 나름 널널하게 주어져서 최적화를 많이 신경쓰지 않아도 충분히 풀 수 있다고 생각한다. 문제 설명문제 링크먼저 2차원 격자 모양으로 이뤄진 2개의 차원이 있다. 두 차원의 크기는 다를 수 있다. 또한 두 차원을 이어주는 차원 이동 게이트가 존재한다. 게이트 또한 2차원 격자 모양으로 이뤄졌으며, 반대편 차원에, 게이트 상에서 정민이가 위치한 자리로 이동한다. 정민이는 상하좌우로 한 번 움직이는데에 1초가 걸리고, 차원 이동을 하는데에는 3초가 걸린다. 이제 블랙홀에 대해 알아보자. 블랙홀은 위와 같이 확산된다. 정민이는 블랙홀..
출제 배경이 문제 또한 HEPC 2024에서 본인이 출제한 문제이다. 신입생 대상으로 출제한 문제로, 자료구조(map)를 안다면 쉽게 풀 수 있고, 그렇지 않더라도 단순 구현으로도 풀어낼 수 있는 문제이다. 문제 설명문제 링크 map을 사용하면 아주 쉬운 문제이므로, 자료구조를 모른다는 전제 하에 풀이하겠다. 먼저 w주차 d번째 날로 들어오는 약속일자를 첫 날로부터의 몇 번째 날인지로 나타내자. 즉, w*7+d로 나타낼 수 있다. 이렇게 계산해두면 풀이가 더 수월해진다. 이름과 약속일자, 필요한 금액을 입력받을 때 각각 나눠서 같은 인덱스의 배열에 저장하자. 물론 tuple이나 struct 등을 사용해서 한 번에 저장해도 무관하다. 이제 이름과 소지한 돈을 입력받을 때, 이전에 입력받은 이름 배열에서 같..