-
[OS] 리눅스 프로세스 스케줄러
프로세스 실행 실험 (1) 논리 CPU가 1개 일 때 리눅스에서 멀티코어 CPU는 1개의 코어가 1개의 CPU로 인식된다. 시스템에서 CPU로 인식하는 것을 논리 CPU라고 하겠다. 책에서는 1개의 논리 CPU에서 각각 100ms 가 소요되는 프로세스를 동시에 1개, 2개, 4개를 실행하며 결과를 관찰한다. 실험코드를 다운받아서 동일하게 실행해 볼 수 있다. 고찰 동시에 프로세스를 여러 개 실행하더라도 특정 순간에 논리 CPU에서 동작되는 프로세스는 1개 논리 CPU에는 여러 개의 프로세스가 순차적으로 1개씩 동작. 첫 번째 프로세스부터 마지막 프로세스까지 프로세스가 한 바퀴 다 돌고 나면 다시 첫 번... Read More
-
[OS] 리눅스 프로세스 관리
커널의 프로세스 생성 및 삭제 기능에 대해 설명한다. 실제 동작을 제대로 이해하려면 가상 기억장치의 이해가 필요한데, 이 부분은 5장에서 다루고 3장에서는 단순한 경우만 설명한다. 프로세스 생성 목적 fork() 함수 // C++ program to demonstrate creating processes using fork() #include <unistd.h> #include <stdio.h> int main() { // Creating first child int n1 = fork(); // Creating second child. First child ... Read More
-
[OS] 리눅스 사용자 모드로 구현되는 기능
시스템 콜 커널의 도움이 필요한 경우 프로세스는 시스템 콜을 통해 커널에 처리 요청을 한다. 커널 모드에서 실행해야하는 경우(=시스템 콜의 종류) 프로세스 생성, 삭제 메모리 확보, 해제 프로세스 간 통신(IPC) 네트워크 파일시스템 다루기 파일다루기(디바이스 접근) 예제 단순한 메시지를 출력하는 코드 hello 프로그램 #include <stdio.h> int main(void) { puts("hello world"); return 0 } 시스템 콜 호출과 CPU 모드 변경 프로세스는 보통 사용자 모드로 실행되고 있다... Read More
-
[OS] 컴퓨터 시스템
컴퓨터 시스템의 하드웨어 구성 [그림] 컴퓨터 시스템이 동작할 때 하드웨어에서 일어나는 일 입력장치 혹은 네트워크 어댑터를 통해서 컴퓨터에서 처리 요청이 들어온다. 메모리에 있는 명령을 읽어 CPU에서 실행하고 그 결괏값을 다시 메모리의 다른 영역에 기록한다. 메모리의 데이터를 하드디스크(HDD)나 SSD 등의 저장 장치에 기록 또는 네트워크를 통해 다른 컴퓨터에 전송하거나 디스플레이 등의 출력 장치를 통해 사람에게 결괏값을 보여줌 1번부터 반복 1~3을 반복해서 사용자에게 필요한 하나의 처리로 정리한 것을 프로그램이라고 한다. 프로그램의 종류 애플리케이션 : 사용자가 직접 사용. e... Read More
-
[Git] README에 파일 목차와 링크 생성하기(file tree)
결과 미리보기 매일 기록하기를 마음먹고 github에 TIL repository를 생성했습니다. 기존에 있던 알고리즘 repository도 TIL 아래로 옮기고 이번주 부터 읽기 시작한 두 권의 책에 대한 기록도 남기고 나니 README에 파일 목차(tree)와 링크를 걸어주면 나중에 보기 편하겠다는 생각이 들었습니다. 찾아보니 많은 분들이 이미 그렇게 하고 계셨고 이 작업을 자동화 해 두신 분도 계시지않을까?하는 생각이 들었습니다. 검색하자마자 역시나(!!) 제가 하고 싶은 일과 98% 유사한 작업을(유사한 환경에서) 이미 해두신 분을 찾았습니다. potados님의 블로그를 보고 차근히 따라하고, 제 환... Read More
-
[Python] generator 재사용하는 방법(itertools.tee() 이용한 복제)
generator generator를 재사용하는 방법을 보기 이전에 generator에 대해 간단하게 짚고 넘어가자. generator는 iterator를 생성해주는 함수이며 함수의 내부 로컬 변수를 통해 내부상태가 유지된다. generator는 모든 값을 순서대로 호출하고 나면 StopIteration Error를 반환하며 더 이상 값을 저장하지 않는다. 앞으로의 예제를 위해 간단한 generator 객체를 생성하여 사용해보자. >>> def test_generator(): ... yield 1 ... yield 2 ... yield 3 ... >>> g... Read More
-
[Python] 파이썬 데코레이터
UNIT42 데코레이터 사용하기 데코레이터 만들기 데코레이터는 함수 안에서 함수를 만들고 반환하는 클로저입니다. 어떤 함수가 있을 때 해당 함수를 직접 수정하지 않고 함수에 기능을 추가하고자 할 때 데코레이터를 사용합니다. def trace(func): def wrapper(): print(func.__name__, '함수 시작') func() print(func.__name__, '함수 끝') return wrapper def hello(): print('hello') trace_hello = trace(hello) # wrapper 함수 trace_h... Read More
-
[Python] 파이썬 비동기의 핵심 코루틴
UNIT41 코루틴 사용하기 지금까지 함수를 호출한 뒤 함수가 끝나면 현재 코드로 다시 돌아왔습니다. 메인 루틴에서 서브 루틴을 호출하면 서브 루틴의 코드를 실행한 뒤 다시 메인 루틴으로 돌아오고, 서브 루틴이 끝나면 서브 루틴의 내용은 모두 사라졌습니다. 코루틴은 각 루틴이 종속적인 관계가 아닌 대등한 관계로서, 특정 시점에 상대방의 코드를 실행하게 되어있는 함수입니다. 일반 함수를 호출하면 코드를 한 번만 실행할 수 있지만, 코루틴은 코드를 여러 번 실행할 수 있습니다. 함수의 코드를 실행하는 지점을 진입점(entry point)라고 하는데, 코루틴은 진입점이 여러 개인 함수입니다. 코루틴에 값 보내기 코... Read More
-
[Python] 파이썬 이터레이터
UNIT 39 이터레이터 사용하기 이터레이터는 값을 차례대로 꺼낼 수 있는 객체입니다. 이터레이터를 보기 전에 우리에게 익숙한 반복 가능한 객체를 먼저 살펴봅시다. 반복 가능한 객체(iterable) 반복 가능한 객체는 요소가 여러 개 들어있고, 한 번에 하나씩 꺼낼 수 있는 객체입니다. 객체가 반복 가능한 객체인지는 객체에 __iter__ 메서드가 들어있는지 확인하면 됩니다. 반복 가능한 객체에서 __iter__를 호출하면 이터레이터가 나옵니다. 이터레이터를 변수에 저장한 뒤 __next__ 메서드를 호출해보면 요소를 차례대로 꺼낼 수 있습니다. 설명에서 알 수 있듯이 반복 가능한 객체(iterable)와 ... Read More
-
[Python] 파이썬 제너레이터
UNIT40 제너레이터 사용하기 제너레이터는 이터레이터를 생성해주는 함수입니다. 이터레이터는 클래스에 __iter__, __next__ 또는 __getitem__ 메서드를 구현해야 하지만 제너레이터는 함수 안에 yield 라는 키워드만 사용하면 끝입니다. 제너레이터 만들기 def number_generator(): yield 1 yield 2 yield 3 for i in number_generator(): print(i) # 1 # 2 # 3 g = number_generator() dir(g) 제너레이터는 제너레이터 객체에서 __next__ 메서... Read More