전체 글 85

스레드(Thread)란? : 프로세스와의 비교

스레드(Thread)란? 스레드란 light weight process라고 불릴 정도로 프로세스와 유사한 개념이다. 이전 글에서 프로세스는 프로그램을 실행시켜서 메모리에 로드한 것이라고 설명한 바 있다. 운영체제로부터 메모리와 CPU 등의 자원을 할당받을 때에는 이렇게 프로세스를 기준으로 할당을 받는다. 스레드는 프로세스를 기준으로 할당받은 자원을 CPU가 실제로 이용하는 것의 기본 단위다. 즉, 프로세스 안에 스레드를 여러 개 두어서 프로세스 단위로 할당받은 자원을 이용해 CPU가 작업을 할 때 스레드 단위로 나누어 처리하도록 할 수 있는 것이다. 이런 이유로 스레드를 light weight process라고도 하는 것이며, 전통적인 개념의 heavyweight process는 단 하나의 스레드로 이루..

CS/운영체제(OS) 2022.04.20

프로세스와 프로세스 문맥, 문맥 교환(Context Switch)

프로세스란? 프로세스란 프로그램을 실행시켜 메모리에 로드한 것으로, 다르게 말하면 프로세스는 곧 살아 움직이는 프로그램이라고 할 수 있다. 프로세스 문맥이란? 프로세스 문맥, 프로세스 컨텍스트란 프로세스를 설명하는 다양한 실행 정보들이다. 프로세스 컨텍스트에는 다음과 같은 것들이 해당된다. 1. 하드웨어 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥은, Program counter(프로그램 코드 중 몇 번째 라인을 수행하고 있는지)와 프로그램 실행 시에 사용되는 data들을 저장하고 있는 각종 레지스터를 포함한다. 2. 프로세스 주소 공간 code 영역, data 영역 그리고 stack 영역으로 구성된 프로세스의 개별적인 주소 공간을 의미한다. 프로세스 주소 공간에 대한 자세한 설명은 여기를 참고하자...

CS/운영체제(OS) 2022.04.19

프로세스 주소 공간 : Stack, Data, Code

파일을 실행시키면 메모리에 프로세스가 로딩된다. 프로세스가 로딩된다는 건, 메모리에 프로세스 Address space가 할당되는 것인데 프로세스의 address space는 stack 영역과 data 영역, code 영역으로 나뉜다. Code 영역 ▷ 프로그램 컴파일 코드가 저장된다. ▷ 프로그램의 코드는 바뀌어서는 안 되기 때문에 읽기만 가능하다. ▷ 실행 파일을 구성하는 유저 모드에서 작동하는 사용자 정의 함수와 유저 라이브러리 함수 코드뿐 아니라 제어문과 상수 등이 포함된다. Data 영역 ▷ 프로그램의 static data와 global variable이 저장된다. ▷ 프로그램이 시작할 때 함께 할당되며 프로그램이 종료되면 소멸한다. ▷ 실행 과정에서 변수값이 충분히 변할 수 있으므로 읽기와 쓰기..

CS/운영체제(OS) 2022.04.19

데이터베이스 시스템(DBS, Database System)

데이터베이스란? 데이터베이스란 어떤 조직의 응용 시스템들이 공유하는 운영 데이터들이 구조적으로 통합된 모임이다. 이때 데이터베이스의 구조는 사용되는 데이터 모델에 의해서 결정된다. 특징 - 데이터 대규모 저장소로 여러 사용자에 의해 동시에 사용된다. - 모든 데이터 간의 중복을 최소화하며 데이터를 통합된 상태로 관리한다. - 운영 데이터 자체 뿐만 아니라 그 데이터에 관한 설명(데이터베이스 스키마 또는 메타데이터)까지 포함한다. - 프로그램과 데이터 간의 독립성이 제공된다. - 데이터에 효율적으로 접근할 수 있고 질의를 할 수 있다. 데이터베이스 시스템과 관련된 개념들 1. 데이터베이스 관리 시스템(DBMS, Database Management System) DBMS란, 데이터베이스를 생성하고, 그 구조..

동기식 입출력과 비동기식 입출력

동기식 입출력 (Synchronous I/O) 동기식 입출력 방식에서는 I/O 요청 후 I/O 작업이 완료된 후에야 제어권이 유저 프로그램으로 넘어간다. 구현 방법 동기식 입출력은 두 가지 방식으로 구현이 가능하다. 1. I/O 작업이 끝날 때까지 CPU를 유휴상태로 낭비시킨다. 이렇게 할 경우 한 번에 하나의 I/O 작업만 일어날 수 있다. 2. I/O 작업이 끝날 때까지 I/O 요청을 한 프로그램에게서 CPU를 빼앗는다. I/O 처리를 기다리는 대기큐에 해당 프로그램을 추가하고 CPU는 다른 프로그램에게 넘긴다. 비동기식 입출력 (Asynchronous I/O) 비동기식 입출력 방식에서는 I/O 작업이 시작된 후에 해당 작업이 끝나기를 기다리지 않고 제어권이 I/O 요청을 한 프로그램에게 즉시 넘어간..

CS/운영체제(OS) 2022.04.18

운영체제의 이중연산모드 : 유저 모드, 커널 모드

두 가지 모드가 존재하는 이유 유저 프로그램을 잘못 수행해서 다른 프로그램이나 운영체제 자체에 피해가 생기는 걸 방지하기 위해 보호 장치를 해둔 것이라고 보면 된다. 두 가지 모드의 구분 1. 유저 모드 : 유저 프로그램을 실행한다. 시스템 데이터에 접근이 제한되며 하드웨어에 직접 접근할 수 없다. 2. 커널 모드 : 모니터 모드라고도 하며 OS 코드나 커널 모드 코드를 실행한다. 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권명령'으로 규정된다. 모든 I/O 명령은 특권 명령이다. Mode bit 하드웨어적으로 구현된 두 가지 모드의 연산을 지원하기 위해 쓰이는 비트다. 1은 유저 모드, 0은 커널 모드를 나타낸다. Interrupt나 Exception이 발생하면 하드웨어가 m..

CS/운영체제(OS) 2022.04.18

운영체제 개념, 기능: 인터럽트, CPU 스케줄링, 메모리 관리, 디스크 스케줄링

운영체제란? 운영체제란 하드웨어 바로 위에 설치되어 사용자나 다른 모든 소프트웨어와 하드웨어를 연결해주는 역할을 하는 소프트웨어 계층이다. 좁게는 컴퓨터 메모리에 상주하는 커널을 의미하며, 넓게는 커널과 각종 시스템 유틸리티를 포함한 개념이다. 운영체제의 목적 - 직접 다루기 복잡한 하드웨어를 대신 다루어 주어서 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다. - 컴퓨터 시스템의 자원(CPU, 메모리, I/O 장치 등)을 효율적으로 관리한다. 운영체제의 기능 1. 인터럽트 처리가 빠른 CPU와 느린 I/O 장치(키보드, 프린트 등) 간 속도 차이를 조절한다. 인터럽트가 들어오면 운영체제가 CPU를 제어한다. 즉, 운영체제로 CPU 제어권이 이양되는 것이다. - 타이머 인터럽트 프로세스들에게 C..

CS/운영체제(OS) 2022.04.17

Sliding Window 알고리즘

슬라이딩 윈도우 알고리즘이란? 고정된 사이즈의 윈도우를 이동시키면서 윈도우 내의 데이터를 이용해 문제를 푸는 알고리즘. 특정 범위 내의 값들을 비교할 때 사용할 수 있다. 유사한 알고리즘으로는 투 포인터가 있는데, 투 포인터는 대개 정렬된 배열에 이용되며 부분 범위의 사이즈가 고정되어 있지 않다는 점에서 슬라이딩 윈도우와 다르다. 글로만 봐서는 쉽게 이해하기 힘들 수 있기에 (나같은 경우에는 슬라이딩 윈도우 구현 코드를 보고도 한 번에 이해하기가 힘들었다.) 수월한 이해를 돕기 위해 구체적인 예시 문제를 가져와서 설명해보겠다. 예제: Leetcode 3. Longest Substring Without Repeating Characters 이 문제는 제목에서도 알 수 있듯이, string이 주어지면, 중복..

CS/알고리즘 2022.04.14

Floyd's Cycle Detection 알고리즘

플로이드의 순환 찾기 알고리즘은 포인터 두 개를 이용해 트리 내에 존재하는 사이클을 빠르게 찾을 수 있는 알고리즘이다. 개념 1. slow와 fast라는 이름을 가진 포인터 두 개를 사용해 각각 한 칸, 두 칸씩 이동시킨다. 2. 둘 중 어느 것도 null값에 도달하기 전까지 반복해서 이동시키면서 두 포인터가 만나는 지점이 있는지 매번 확인한다. 이때 만약 사이클이 없다면, 각자 다른 간격으로 이동하는 두 포인터는 만나지 않고 리스트의 끝에 도달한다. 그러나 만약 사이클이 있다면, 리스트의 끝에 도달할 수 없기 때문에 반복해서 돌다가 특정 지점에서 만나게 된다. 구현 코드 //관련 문제: https://leetcode.com/problems/linked-list-cycle/ /** * Definition..

CS/알고리즘 2022.04.07

윈도우에서 Docker 다시 활성화 시키기

이전에 Docker를 사용하기 위해 가상환경을 켜놓은 상태로 다른 작업을 하다가 문제가 생겼었다. 나중에 Docker를 다시 사용해야 할 때 문제가 될 것이란 걸 알았지만, 그건 그냥 미래의 나에게 맡기고 가상환경을 껐었다. 이번에 다시 Docker를 활성화 하면서 거쳤던 작업을 다음에 다시 참고할 수 있도록 기록하려고 한다. 1. Virtual Machine Platform 사용 체크 Virtual Machine Platform이 Hyper-V hypervisor를 포함하고 있어서 이것만 체크해줘도 된다. 실제로 난 Hyper-V가 아예 목록에 없는데 잘 실행 됐다. 2. Windows Terminal에서 wsl2 활성화 $ wsl --set-default-version 2 앞에서 Virtual Mac..

카테고리 없음 2022.03.30