본문 바로가기

전체 글43

시스템 프로그래밍 핵심 기술 시스템 프로그래밍 기반 요소 시스템 콜 C 라이브러리 C 컴파일러 API 응용 프로그램과 분리된 하위 호환 인터페이스 ex) 시스템 콜 래퍼, 입출력 라이브러리 등 동적, 정적 라이브러리가 있음 C 라이브러리 유닉스 C 라이브러리 - libc 리눅스 C 라이브러리 - GNU libc-glibc (지립씨, 글립씨) 시스템콜, 시스템콜 래퍼, 기본 응용 프로그램 기능 포함 C 컴파일러 유닉스 C 컴파일러 - cc 리눅스 C 컴파일러 - GNU cc- gcc (지씨씨) 리눅스에 gcc 설치 sudo apt-get install gcc GCC 컴파일 과정 $ gcc -o test test.c (1) 전처리기 소스 파일의 전처리기 부분을 처리하고 test.i 임시파일을 생성 (2) C컴파일러 전처리된 파일 tes.. 2022. 1. 9.
시스템 프로그래밍 - 쉘 사용법 쉘 사용자와 컴퓨터 하드웨어 또는 운영체제간 인터페이스 사용자의 명령을 해석해서 커널에 명령을 요청 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있다. 쉘 종류 Bourne-Again Shell(bash): GNU 프로젝트의 일환으로 개발됨, 리눅스 디폴트 Bourne Shell (sh) C Shell Korn Shell (ksh): 유닉스에서 가장 많이 사용됨 다중 사용자 관련 명령어 whoami 로그인한 사용자 ID를 알려줌 $ whoami ubuntu passwd 로그인한 사용자 ID의 암호 변경 $ passwd (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated su.. 2022. 1. 6.
시스템 프로그래밍 - 리눅스 리눅스 서버, 클라우딩 컴퓨팅에 많이 사용되는 운영체제 소프트웨어의 대부 UNIX 계열 운영체제 plain 하게 프로그래밍이 가능 C언어 표준에 맞춰 프로그래밍이 가능하다. ANSI C - C언어 표준 리눅스의 역사 리눅스의 시작 리누스 토발즈 (Linus Torvalds)가 개발 대학에 있는 UNIX 컴퓨터를 집에서 쓰고 싶다는 생각을 가지고 LINUX 운영체제 개발 다중 사용자, 다중 작업(시분할 시스템, 멀티 태스킹)을 지원하는 유닉스와 유사한 운영체제 GNU (Gnu is Not Unix) 프로젝트 유닉스 운영체제를 여러 회사에서 각자 개발하고 소스를 공유하지 않음 리차드 스톨만이 초기 컴퓨터 개발 공동체의 상호협력적 문화로 돌아갈 것을 주장하며 1985년도에 GNU 선언문 발표 GNU 프로젝트를.. 2022. 1. 3.
파일 시스템 파일시스템 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘 파일 시스템이 만들어진 이유 0과 1의 데이터를 비트 단위로 관리하기에는 오버헤드가 너무 크다. 블록 단위로 관리하기로 함 (보통4KB) 블록마다 고유 번호를 부여해서 관리한다. 사용자가 각 블록 고유 번호를 관리하기 어려움 (추상적, 논리적 객체가 필요) 파일 개념이 생김 사용자는 파일 단위로 관리, 각 파일에는 블록 단위로 관리 저장매체에 효율적으로 파일을 저장하는 방법 가능한 연속적인 공간에 파일을 저장하는 것이 좋으나 외부 단편화 문제가 발생 외부 단편화, 파일 사이즈 변경 문제로 불연속 공간에 파일 저장 기능 지원이 필요 블록체인: 블록을 링크드 리스트로 연결 (끝에 있는 블록을 찾으려면 처음 블록부터 주소를 따라가야 한다.. 2022. 1. 3.
가상 메모리 가상 메모리 (Virtual Memory System) 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있음 폰노이만 구조 기반이므로 코드는 메모리에 반드시 있어야 한다. 실제 특정시간에 특정 프로세스에서 참조하는 메모리는 한정적이다. 실제로 프로세스가 필요로 하는 공간만 물리 메모리(RAM)에 넣고 해당 주소를 참조하고 있는다. 가상메모리 기본 아이디어 프로세스는 가상 주소를 사용하고 실제 해당 주소에서 데이터를 읽고 쓸때만 물리주소로 바꿔준다. virtual address(가상 주소) - 프로세스가 참조하는 주소 physical address(물리 주소) - 실제 메모리 주소 MMU(Memory Management Unit) CPU에 코드 실행시 가상 주소 메모리 접근이 필요할.. 2022. 1. 1.
스레드 (Thread) 스레드의 개념 Light Weight Process 라고도 한다. 프로세스 프로세스 간에는 각 프로세스의 데이터 접근이 불가능하다 스레드 하나의 프로세스에 여러개의 스레드 생성이 가능하다. 스레드들은 동시에 실행이 가능하다. 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능하다. Stack영역과 Register(SP, PC)는 스레드 마다 나뉜다. ( Thread 1 Stack Pointer, Thread 2 Stack Pointer, Thread 3 Stack Pointer ) Heap, Data, Code(Text) 영역은 공유한다. 최근 CPU는 멀티 코어를 가지므로, Thread를 여러개 만들어 멀티 코어의 활용도를 높인다. 멀티 프로세싱 여러 cpu가 하나의 프로세스를 병렬처리하여 실.. 2021. 12. 29.
프로세스간 커뮤니케이션 (IPC) IPC (Inter Process Communication) IPC는 프로세스간 커뮤니케이션을 하기 위해 사용되는 기법 원칙적으로 프로세스는 다른 프로세스의 공간을 접근할 수 없다. (프로세스의 데이터/코드가 바뀔 수 있어 위험하기 때문) 프로세스간 통신이 필요한 이유 성능을 높이기 위해 여러 프로세스를 만들어서 동시에 실행하기 때문에 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요하다. fork() 시스템콜 함수로 자신을 복사해서 새로운 프로세스를 만들 수 있다. (부모 프로세스, 자식 프로세스) 예를 들어 1~10000까지 더하는 프로그램을 실행할 때 fork()함수로 10개 프로세스를 만들어 각각 1000씩을 더한 후에 각각 더한 값을 모두 합하면 10배 빠르게 동작이 가능하다. 단 각각 더한.. 2021. 12. 28.
프로세스의 구조와 컨텍스트 스위칭 일반적인 프로세스의 구성 stack (스택프레임) 함수 호출 또는 로컬변수 함수 내부에도 별도 변수를 지정할 수 있으며 함수 실행이 끝나면 사라진다. 때문에 함수가 실행되는 동안만 변수를 저장되는 공간이 필요한데 이 공간을 stack이라 한다. 해당 변수를 각각 함수가 끝날때 실행될 영역인 return address와 함께 stack에 저장하고 해당 함수 실행이 끝나면 각각의 변수를 지우고 return address를 찾아간 후 return address 또한 지우고 다음 코드를 실행한다. 함수 내부에서 또다른 함수가 실행되는 경우 두번째로 실행된 함수 내부의 변수와 return address가 더 나중에 저장이 되고 이 함수가 더 먼저 종료되기 때문에 이 함수의 변수와 return address가 먼저.. 2021. 12. 27.
인터럽트 인터럽트란 cpu가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 cpu에 알려서 처리하는 기술 특정 이벤트가 발생했을때 cpu에 인터럽트를 걸어준다. 이벤트와 인터럽트 인터럽트는 일종의 이벤트로 불림 이벤트에 맞게 운영체제가 처리한다. 인터럽트 필요 이유 어느 한순간 cpu가 실행하는 명령은 하나이기 때문에 입출력 하드위에 등의 장치나 예외상항이 발생한 경우 cpu가 해당 처리를 할 수 있도록 cpu에 알려줘야한다. 인터럽트 처리 예시 예외 상황 핸들링 코드에 오류가 있어 해당 응용프로그램을 종료(Kill) 하는 경우 해당 예외사항을 cpu에 알려주기 위해 인터럽트가 필요하다. ex) 숫자를 0으로 나누는 경우의 예시 코드 #include in.. 2021. 12. 26.
프로세스 스케줄링 알고리즘 프로세스란? 메모리에 올려져서 실행 중인 프로그램 프로세스라는 용어는 작업, task, job 이라는 용어와 혼용된다. 응용 프로그램이 프로세스는 아니며 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있다. 하나의 응용 프로그램은 여러 개의 프로세스로(프로그램)가 상호작용을 하면서 실행될 수도 있다 여러 프로그램을 만들어서, 서로 통신하면서 프로그램을 작성할 수 있다 (IPC 기법) 스케줄러와 프로세스의 관계 누가 프로세스 실행을 관리할까 -> 스케줄러 스케줄러가 스케줄링 하는 단위 -> 프로세스 스케줄링 알고리즘 어느 순서대로 프로세스를 실행시킬까를 정하는 알고리즘 스케줄링 알고리즘의 목표의 예시 시분할 시스템: 프로세스 응답시간을 가능한 짧게 멀티 프로그래밍: cpu 활용도를 최대로 높게 스케줄링.. 2021. 12. 25.