본문 바로가기

컴퓨터공학기초 개념/시스템 프로그래밍37

37. 시스템 프로그래밍 - 파일시스템 관련 시스템 콜 0. 시작하기전에 - 이번 포스팅에서는 파일 시스템과 관련된 시스템 콜에 대해서 알아보자. 1. inode 파일 시스템 - 리눅스는 inode라는 파일 시스템을 사용한다. - 이 파일 시스템을 이해하는데 가장 큰 도움이 되는 것은 inode의 구조체를 이해하는 것이다. - 다음 사진에서 빨간색 네모로 표시된 inode의 구조체를 살펴보자. - 프로세스는 pid로 구분되고, 프로세스의 상태를 나타내는 pcb를 가지고 있다. - 이처럼 파일도 inode번호로 구분되고, 각 inode번호에 대응하는 구조체를 갖고 있다. ▶ Mode - 파일 종류, 권한 ▶ Owner Info - 소유자, 소유 그룹 ▶ Size - 파일의 사이즈 ▶ Timestamps - 파일의 생성, 수정 등의 시간정보 ▶ Direct Bl.. 2021. 9. 27.
36. 시스템 프로그래밍 - mmap 사용방법 0. 시작하기전에 - 이전 포스팅에서 mmap을 어떻게 작동하는지 알아보았다. - 이번 포스팅에서는 mmap을 직접 사용 및 활용해보자. 1. mmap()의 반환값 - 만약 mmap()을 실행하여 성공적으로 파일을 메모리에 매핑한다면, 해당 메모리의 주소값이 반환된다. - mmap()이 실패하는 경우에는 에러가 발생한다. - 이를 통해, mmap()의 실행결과를 판단할 수 있다. 2. msync() - 파일내용이 수정되면 파일이 종료될 때, 파일에 접근하여 변경된 내용을 파일에 덮어씌우는 방식으로 내용이 수정된다. - 이를 수행하는 함수가 msync()다. - 다음 msync()의 원문을 살펴보자. int msync(void *start, size_t length, int flags); ▶ *start .. 2021. 9. 27.
35. 시스템 프로그래밍 - 메모리 & mmap 1. molloc() - memory allocation - molloc()은 C언어에서 동적 메모리 생성을 위해 사용되는 함수다. - 동적 할당이란, 개발자가 직접 메모리를 할당한다는 의미이다. - 프로세스의 Heap 영역은 동적으로 생성된 메모리가 할당되는 장소다. - molloc()을 사용하여 메모리를 동적 할당하는 과정이 어떻게 진행되는지 살펴보자. a) 동적 할당과 관련된 함수 ▶ molloc() - 동적 할당 메모리를 생성하는 함수 ▶ free() - 동적 할당된 메모리를 해제하는 함수 2. mmap() - memory mapping a) 파일 처리 성능 개선 기법 - 메모리에 파일을 매핑하기 - 프로세스에서 파일을 읽을 때, OS의 시스템 콜을 시작으로 저장매체에 접근하여 파일을 읽기 까지의.. 2021. 9. 27.
34. 스레드 - detach와 mutex 0. 시작하기전에 - 이전 포스팅에서 스레드에 대해서 배우면서, 스레드 관리를 위한 기본적인 함수들을 알아봤다. - 이번 포스팅에서는 추가적인 스레드 함수와 동기화에 대해서 알아보자. 1. pthread detach - 스레드를 해제시키는 함수에는 2가지가 있다. ▶ pthread_join - 추가 생성된 스레드가 종료될 때까지 메인 스레드는 대기상태가 된다. - 추가 스레드의 작업이 종료되면 스레드 자원을 해제한다. ▶ pthread_detach - pthread_join을 기다리지 않고, 호출 즉시 스레드 리소스(메모리 영역)를 해제한다. - 즉, 추가된 스레드의 작업을 진행하지 않고 바로 스레드 리소스를 해제하게된다. - 다음 함수의 원문을 보자. // thread: detach할 스레드의 식별자 .. 2021. 9. 25.
33. 스레드 - 이해와 기본 1. Thread란? a) 표준 thread API - 리눅스의 스레드는 POSIX 스레드 또는 Pthread라고 부른다. b) Pthread - C언어로 구현된 유닉스 시스템의 핵심 스레딩 라이브러리다. - 저수준 API로 100여개의 함수를 제공한다. - 다른 스레드 솔루션 또한 Pthread를 기반으로 구현되어 있으므로, 반드시 익혀야 하는 개념이다. 2. Pthread 라이브러리 a) 기본적인 사용법 - 헤더 파일을 정의한다. - pthread 라이브러리의 모든 함수는 pthread_ 로 시작한다. - pthread 라이브러리의 함수는 두가지 핵심기능으로 나뉜다. ▶ 스레드 관리 - 스레스 생성 / 종료 / 조인 / 디태치 함수 등 ▶ 동기화 - 뮤텍스 등 동기화 관련 함수 b) Pthread 컴.. 2021. 9. 24.
32. 쉘 스크립트 - 현업 예제(backup, log, tar, find) 0. 시작하기전에 - 이전 포스팅까지 기초적인 쉘스크립트 사용법에 대해서 알아보았다. - 이번 포스팅에서는 현업에서 사용할 만한 쉘 스크립트 예제를 작성해보고 이해해보자. 1. 현업 예제 - backup.sh - 서버는 백업을 해놓는 것이 굉장히 중요하다. - 그러므로 백업을 하는 쉘 스크립트 예제를 살펴보자. #!/bin/bash if [ -z $1 ] || [ -z $2 ]; then # 인자 2개가 중 하나라도 없으면 echo usage: $0 sourcedir targetdir #압축할 파일(sourcedir)과 압축된 파일이 저장될 디렉토리(targetdir)를 입력하라. else # 인자 2개가 모두 존재하는 경우 SRCDIR=$1 # 첫번째 인자가 들어갈 변수 DSTDIR=$2 # 두번째 인.. 2021. 9. 24.
31. 쉘 스크립트 - 조건문과 반복문 0. 시작하기전에 - 이전 포스팅에서는 조건문에 대해서 배웠다. - 이번 포스팅에서는 조건문을 포함한 추가적인 지식들과 반복문에 대해서 배워보자. 1. 파일 상태에 따른 조건문 - 파일의 상태에 따라서 조건문을 만들 수 있다. - 파일 상태를 확인하는 쉘 스크립트는 다음과 같다. a) 실습예제 - 파일의 존재유무에 따른 조건문을 가진 프로그램을 작성해보자. #!/bin/bash if [ -e $1 ] then echo "file exist" fi 2. 논리 연산자 - 쉘 스크립트의 논리연산자는 다음과 같이 사용할 수 있다. 3. if~else 구문 - 쉘 스크립트에서 if ~ else 구문은 다음과 같이 작성할 수 있다. #!/bin/bash if [ 조건문 ] then 명령어 else 명령어 fi a).. 2021. 9. 24.
30. 쉘 스크립트 - 조건문 1. 쉘 스크립트의 지역변수 - 쉘 스크립트에는 기본적으로 미리 정의 되어있는 변수들이 있다. - 다음의 사진을 확인해보자. a) 실습예제 - 위의 설명이 정확하기 무엇을 말하는 것인지 잘 모르겠다. - 그러므로 실습을 통해서 알아보자. #!/bin/bash echo "쉘의 프로세스번호 = " $$ echo "쉘 스크립트 이름 = " $0 echo "명령줄 인수 = " $1 $2 $3 $4 $5 echo "모든 명령줄 인수리스트 = " $* echo "인수의 개수 = " $# 2. 연산자 - expr(expression): 숫자계산 - expr을 사용하는 경우, 역 작은따옴표를 사용해야한다. (물결표시 아래에 있는 특수문자) - 연산자 *와 괄호() 앞에는 역실래시(\)를 같이 사용 해야한다. - 연산자.. 2021. 9. 24.
29. 쉘 스크립트 - 이해와 변수 0. 시작하기전에 - 쉘은 익히 알고있는대로, 사용자가 운영체제를 다루기 쉽도록 제공하는 인터페이스다. - 이 쉘의 기본 명령어들과 몇가지 문법을 이용해서 프로그램을 만들 수 있다. - 쉘 스크립트는 서버 작업의 자동화 및 운영(DevOps)를 위해 반드시 익혀두어야 하는 기술이다. - 이번 포스팅에서는 쉘에서 사용하는 언어인, 쉘 스크립트에 대해서 알아볼 예정이다. 1. 쉘 스크립트란? - 쉘 스크립트는 서버를 다루기위해 사용되는 언어다. - 사용하는 쉘에 따라서 쉘 스크립트의 문법이 조금씩 다르다. - 최근에는 Perl과 Python을 이용하여 서버를 관리하기도 하는데, 전통적으로 지금까지 사용되는 언어가 쉘 스크립트다. a) 쉘 스크립트 활용예시 - 서버에 로그파일이 너무 쌓인 나머지, 서버에 남은.. 2021. 9. 23.