본문 바로가기

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

19. 프로세스 - 프로세스 생성(fork) 0. 시작하기전에 - 프로세스의 구조가 어떻게 되어있는지 복습해보자. https://devraphy.tistory.com/159 13. 프로세스 구조(1) 프로세스와 컨텍스트 스위칭 스케줄러에 의해 어떤 프로세스에서 다른 프로세스로 바뀌는 과정을 컨텍스트 스위칭이라고 한다. 이 컨텍스트 스위칭을 이해하기 위해서는 프로세스의 구조에 대 devraphy.tistory.com 1. 프로세스 생성 a) 기본적인 프로세스 생성과정 - 5가지 프로세스 메모리 공간(Text, Data, BSS, Heap, Stack)이 생성된다. - 코드 이미지가 각 프로세스 공간에 업로드되고, 실행된다. b) 프로세스 계층의 형성 - 이전 포스팅에서 다룬 내용이므로 간략하게 복습해보자. - 리눅스에서는 프로세스를 생성할 때, 기존.. 2021. 9. 15.
18. 프로세스 - 시스템 콜 0. 시작하기전에 - 지난 포스팅에서는 프로세스에 대해 간략하게 배우면서, 프로세스 ID에 대해서 알아보았다. - 이번 포스팅에서는 프로세스와 관련된 시스템 콜에 대해서 배울 예정이다. 1. 프로세스 관리에 사용되는 시스템 콜 - 프로세스 관리 관련된 시스템 콜을 사용해보기 위해서는 gcc를 설치해야 한다. - 이전 포스팅을 참고하여 gcc(C언어 컴파일러)하는 것을 권장한다. a) getpid() 와 getppid() - 현재 프로세스의 pid와 ppid를 반환하는 함수다. - 프로세스 ID는 커널 영역을 통해 알아낼 수 있는 정보이기 때문에, 시스템 콜을 사용한다. - 우선 함수의 원형부터 살펴보자. #include #indclude pid_t getpid(void); pid_t getppid(voi.. 2021. 9. 15.
17. 프로세스 - 프로세스 ID 0. 시작하기전에 - 프로그램, 프로세스, 스레드에 대해서 간략하게 복습해보자. ▶ 프로그램 - 바이너리, 코드이미지, 응용프로그램, application, 실행파일 등의 다양한 형태로 존재한다. ▶ 프로세스 - 현재 실행중인 프로그램으로, 메모리에 적재되어 있으며 프로세스 상태정보(PCB)를 사용하여 처리한다. ▶ 스레드 - 프로세스 내부에 나뉘어져 있는 세부 작업을 가리킨다. - 리눅스 프로세스는 기본적으로 싱글스레드 형식을 가진다. - 싱글스레드 프로세스: 기본 프로세스 - 멀티스레드 프로세스: 여러 스레드가 존재하는 프로세스 1. 프로세스 ID - 각 프로세스에 부여되는 프로세스 고유번호, PID - PID의 최대값은 32768이다. (2의 15승) - 부호형(signed) 16비트 정수값을 사용.. 2021. 9. 15.
16. 시스템 프로그래밍 - ABI와 표준 1. API - API는 다양한 환경에서 사용될 수 있도록 하위호환이 가능한 인터페이스다. - 하위호환이라는 의미는, 실행파일(= 응용프로그램)의 코드를 변경하지 않고도 다양한 환경에서 동일한 기능을 수행할 수 있도록, - 하나의 기능에 대해서 다양한 인터페이스를 제공한다는 의미다. 2. C 라이브러리 ▶ libc - 유닉스의 C 라이브러리 ▶ glibc(GNU libc) - GNU 프로젝트에서 개발된 리눅스 C 라이브러리 - 시스템 콜, 시스템 wrapper, 기본 응용 프로그램 등이 포함된 라이브러리 3. C 컴파일러 ▶ cc - 유닉스의 C 컴파일러 ▶ gcc(GNU cc) - GNU 프로젝트에서 개발된 리눅스 C 컴파일러 - 우분투 리눅스에는 gcc를 설치하여 사용한다. - gcc 컴파일러를 설치.. 2021. 9. 10.
15. 시스템 프로그래밍 핵심개념 1. 시스템 프로그래밍 기반요소 - 리눅스의 시스템 프로그래밍은 크게 3가지를 기반으로 두고 있다. ▶ 시스템 콜(System call) - 운영체제를 사용자 영역에서 제어하기 위한 명령어 - 사용자가 접근할 수 없는 커널영역을 시스템 콜을 이용해 조작할 수 있다. - 리눅스의 시스템 콜은 C언어를 기반으로 한다. ▶ C 라이브러리 - 여러가지 기능을 묶어놓은 것을 라이브러리라고 한다. - 시스템 콜도 라이브러리 형태로 제공된다. - 라이브러리를 API라고 말하기도 한다. ▶ C 컴파일러 - 리눅스는 C언어로 구성되어 있다. - C언어는 컴파일러를 필요로 하는 언어다. - 그러므로 C 컴파일러는 필수다. 2. System call a) 시스템 콜 - 운영체제 파트에서 깊이있게 배운 개념이므로 간략하게 알.. 2021. 9. 10.
14. shell - 소프트링크와 특수파일 1. 소프트링크 - 소프트링크는 심볼릭 링크라고도 불린다. - 하드링크와 마찬가지로, 소프트링크도 ln 명령어를 통해 사용한다. - 그러나 -s 옵션을 사용한다는 것에서 차이점이 생긴다. a) ln -s 옵션 - s 옵션을 함께 사용하면, 윈도우의 바로가기 기능과 동일한 기능을 수행한다. - 즉, 원본파일이 삭제되면 소프트링크도 함께 삭제되는 것이다. b) ls - al로 소프트링크 확인하기 - 소프트 링크와 하드링크의 차이점은 ls -al 명령어를 통해 이를 확인할 수 있다. - 우선 ln -s 옵션을 이용하여 소프트링크를 생성한다. - 다음 ls -al 옵션을 이용하여 파일의 정보를 출력한다. - 특이한 점은 권한정보가 다르다는 것이다. - 위의 사진에서 가장 좌측에 적혀져 있는 권한 부분을 살펴보자.. 2021. 9. 10.
13. shell - 하드링크 0. 시작하기전에 - 지금까지 리눅스의 파일시스템에 대해서 배웠다. - 이번 포스팅에서는 리눅스 시스템에만 존재하는 독특한 링크라는 개념에 대해서 알아보자. 1. 추가적인 파일 시스템 명령어 a) cp 명령어 - cp는 copy를 지칭하는 명령어로, 복사 기능을 가진 명령어다. - cp 명령어는 다음과 같은 방법으로 사용할 수 있다. cp 복사할파일명 부여할이름 - 위의 사진은 link.txt라는 프로그램을 link2.txt라는 이름으로 복사한 예시다. b) cp - rf 옵션 - 어떤 디렉토리를 복사한다고 할 때, 해당 디렉토리의 내부 파일 또는 디렉토리 또한 복사하고 싶을 것이다. - 이 경우 rf옵션을 사용한다. (r = 재귀적으로 적용한다는 의미, f = 묻지말고 다 복사하라는 의미) cp -rf.. 2021. 9. 10.
12. shell - 리눅스 파일 시스템 탐색 0. 시작하기전에 - 이전 포스팅에서 리눅스 파일 시스템에 대해서 알아보았다. - 가장 중요한 부분은 모든 자원(데이터, 디바이스, etc)을 파일로 취급하여 다룬다는 것이다. - 파일 시스템은 다양한 외부장치 또는 디바이스도 파일로서 처리하는데, - 이것이 가능한 이유는 추상화(abstraction)을 통한 가상파일시스템 인터페이스를 이용하기 때문이다. - 추상화라는 개념을 어려워 할 것 같은데, 추상화란 복잡한 기능이나 데이터의 공통적인 특성을 구조화(uniformation) 시킨 것이다. - 추상화를 사용하면 기본적으로 제공되는 기능이 있고, 세부적으로 customize 또는 optimize를 하고 싶다면 - 추가적으로 코드를 작성하여 기능을 수정할 수 있다. 1. 파일과 inode - 리눅스는 모.. 2021. 9. 10.
11. shell - 리눅스 파일 시스템 1. 파일 시스템이란? - 이전에 운영체제 포스팅에서 파일 시스템에 배운적이 있다. - 우선 파일 시스템이 무엇인지 복습을 해보자. - 파일과 관련된 대표적인 명령어 4가지 (open, read, write, close)가 있다. - 일반적으로 파일을 읽고(read) 쓰기(write) 위해 사용되는 경우가 많다. - 하지만, 네트워크의 입장에서 파일을 읽고 쓴다는 것은 무슨 의미일까? - 이는 네트워크를 통해 다른 서버로부터 데이터를 가져와 읽거나, 다른 서버로 데이터를 입력(쓰기)하는 것을 의미한다. - 이러한 관점에서 생각해보면, 외부장치도 데이터를 읽거나 쓰는 과정을 공통적으로 필요로 한다. ex) CD, USB, 마우스, 키보드, 모니터 etc. - 이와 같은 이유로, 각 장치에 따른 별도의 인터.. 2021. 9. 9.