linux
scheduler - cron 표현식
Cron cron은 Unix 계열 운영체제의 작업 스케줄러이다. 소프트웨어 환경을 설정하고 유지 관리하는 사용자는 cron을 사용하여 작업(command or shell script)을 예약하여 cron 작업이라고도 하며 고정된 시간, 날짜, 간격으로 주기적으로 실행한다. 일반적으로 시스템 유지 관리를 자동화하지만 범용 특성으로 인해 인터넷에서 파일을 다운로드하고 정기적으로 이메일을 다운로드하는 것과 같은 작업에 유용하다. 반복작업을 예약하는 데 가장 적합하고 일회성 작업 예약은 at 유틸리티를 사용하여 수행할 수 있다. Syntax # ┌───────────── 분 (0 - 59) # │ ┌───────────── 시(0 - 23) # │ │ ┌─── ────────── 요일(1 - 31) # │ │ ..

linux task mangement
Task란 task: 자원 소유권의 단위 thread: 수행의 단위 process: 동작중인 프로그램 program: 디스크에 저장되어 있는 실행가능한 형태의 파일 test.c 는 'start' 라는 문자열을 출력한 후 5초 간 잠들었다가 'end' 라는 문자열을 출력한다. // test.c #include #include int main(void) { printf("start\n"); sleep(5); printf("end\n"); return 0; } gcc를 이용하여 test.c 소스를 컴파일하여 test라는 이름의 바이너리 프로그램을 생성한다. test 는 Intel x86 계열의 CPU 에서 수행가능한 ELF(Executable Linking Format)의 실행 파일이다. test를 백그라운드..

리눅스 커널 구조
리눅스 커널 구조 운영체제가 관리해야 할 자원은 크게 물리적인 자원과 추상적인 자원으로 구분할 수 있다. 물리적인 자원은 CPU, 메모리, 디스크, 터미널, 네트워크 등 시스템을 구성하고 있는 요소들과 주변 장치 등이 있다. 추상적인 자원은 물리적인 자원을 운영체제가 관리하기 위해 추상화 시킨 객체들이다. CPU를 추상화시킨 task 메모리를 추상화시킨 세그먼트와 페이지 디스크를 추상화시킨 파일 네트워크를 추상화시킨 프로토콜, 패킷 물리적인 자원에 대응하지 않으면서 추상적인 객체로만 존재하는 자원도 있다. (보안(security)나 사용자 ID에 따른 접근 제어(access control)등) 리눅스 개념적 구조 Task Manager cpu라는 물리적인 자원을 태스크라는 추상적인 자원으로써 제공 태스크..

운영체제 동작 사례
운영체제 동작사례 운영체제는 일반적으로 자원관리자(resource manager)라고 정의된다. 운영체제는 컴퓨터에 있는 처리기(CPU), 메모리, 디스크 등의 자원을 관리하여 일반 사용자들이 컴퓨터를 사용할 수 있도록 지원해준다. 사용자가 프로그램 작성, 컴파일, 프로그램 수행이라는 일련의 요청을 수행함에 따라 운영체제가 디스크, cpu, 메모리 자원을 할당하여 변화한다. 운영체제의 초기 상태 CPU 메모리 디스크 3개의 자원을 관리하고 있고 현재 아무도 사용하지 않는 상태(ex: 처음 운영체제를 설치한 상태)로 가정하고 있다. 여기서 사용자가 문서작업을 수행하면 이를 위해 운영체제가 필요한 자원을 제공해 주게 된다. C 프로그램 작성 작성한 프로그램 저장 저장 요청은 운영체제로 전달되고 운영체제는 비..

Makefile tutorial
Makefile은 큰 프로그램의 어느 부분을 다시 컴파일해야 하는지 결정하는 데 사용된다. 대부분의 경우 C 또는 C++ 파일이 컴파일된다. 다른 언어에는 일반적으로 Make와 유사한 목적을 수행하는 자체 도구가 있다. Make는 변경된 파일에 따라 일련의 지침을 실행해야 하는 경우 컴파일을 넘어서도 사용할 수 있다. 다음은 Make로 빌드할 수 있는 종석성 그래프의 예이다. 파일의 종속성이 변경되면 파일이 다시 컴파일된다. C/C++ 대체 빌드 시스템은 SCons, CMake, Bazel, Ninja다. Visual Studio와 같은 일부 편집기에는 자체 빌드 도구가 있다. Java의 경우 Ant, Maven, Gradle이 있다. Go 및 Rust와 같은 다른 언어에는 자체 빌드 도구가있다. Pyt..

Linux File System
Linux File Structure 리눅스는 모든 게 다 파일로 이루어져있다. 파일 시스템을 이해하는 것은 파일 입출력 작업을 수행하고 리눅스/유닉스 시스템을 이해하는 데 시작점이라고 할 수 있다. System Call open read write close ioctl (device driver에 제어 정보 전달) Low-Level File Access 리눅스에선 기본적으로 3가지의 파일이 열려있고 각 파일을 id로 구분한다. 다음 3 파일은 운영체제가 시작되면서 바로 오픈된다. 0: standard input(stdin) 1: standard output(stdout) 2: standard error(stderr) write 사용법 man 2 write 1번 매뉴얼: 리눅스 명령어관련 2번 매뉴얼: ..

GCC 컴파일러 사용법
컴파일 과정 소스코드는 다음과 같은 과정으로 컴파일되어 실행파일이 된다. 전처리기(preprocessor): 소스코드의 주석제거, define을 치환하는 기능 컴파일러(compiler): 어셈블리 파일로 변환(어셈블리어는 CPU 명령어 조합으로 CPU에 의존적) 어셈블러(assembler): object 코드 파일로 변환. object 파일은 0과 1로 이루어진 바이너리 코드(아직 주소 정보가 확정되지 않음) 링커(linker): object 파일을 묶어 실행 코드 파일로 변환. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다.(링커는 운영체제에 의존적) GCC 명령어 명령창에서 gcc 매뉴얼을 확인해보자. GCC(1) GNU GCC(1) NAME gcc - GNU project C ..
vi cheat sheet
전체 명령어 정리 입력모드 i 현재 커서 앞에 입력한다. a 현재 커서 뒤에 입력한다. o 커서가 위치한 행의 다음 행에 입력한다. I(대문자 i) 커서가 위치한 행의 첫 컬럼으로 이동하여 입력한다. A 커서가 위치한 행의 마지막 컬럼으로 이동하여 입력한다. O 커서가 위치한 행의 이전 행에 입력한다. 커서 이동 k 커서를 위로 이동한다. j 커서를 아래로 이동한다. h 커서를 왼쪽으로 이동한다. l 커서를 오른쪽으로 이동한다. ^ / O 커서를 현재 행의 처음으로 이동한다. $ 커서를 현재 행의 마지막으로 이동한다. - 커서를 한줄 위 처음으로 이동한다. + / Enter 커서를 다음 행의 처음으로 이동한다. H 커서를 화면의 맨 윗행으로 이동한다. M 커서를 화면의 중간 행으로 이동한다. L 커서를 ..