Fascination
article thumbnail
[LinuxProgramming] Chapter 10. 메모리 관리
Study/Linux 2022. 6. 7. 02:52

[LinuxProgramming] Chapter 10. 메모리 관리 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 10.1 변수와 메모리 1) 프로세스 - 프로세스 프로세스는 실행 중인 프로그램 프로그램 실행을 위해서는 프로그램의 코드, 데이터, 스택, 힙, U-영역 등이 필요 프로세스 이미지(구조)는 메모리 내의 프로세스 레이아웃 프로그램 자체가 프로세스는 아님 - 프로세스 구조 코드 세그먼트 기계어 명령어 데이터 세그먼트 static, 전역변수가 저장됨 스택(stack) 함수 호출과 관련 지역 변수, 매개 변수, 반환 주소, 반환값 등 잦은 함수 호출 시 메모리 공간 부족으로 stack overflow 발생 힙(heap) 동적 메모리 할당 malloc() in C new class() in java..

article thumbnail
[LinuxProgramming] Chapter 09. 프로세스 제어
Study/Linux 2022. 6. 6. 18:34

[LinuxProgramming] Chapter 09. 프로세스 제어 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 9.1 프로세스 생성 1) 프로세스 생성 fork() - 자식 프로세스(child proccess): 새로운 프로그램을 실행하기 위해서 생성하는 프로세스 - 부모 프로세스(parent proccess): 자식 프로세스를 생성한 프로세스 - fork() 시스템 호출: 리눅스에서 새로운 프로세스를 생성하는 유일한 방법 부모 프로세스를 똑같이 복제하여 새로운 자식 프로세스를 생성 자기복제: 자식 프로세스는 부모 프로세스(코드, 데이터, 스택, 힙 등)를 똑같이 복제해 만들어짐 fork() 호출 후 부모 프로세스와 자식 프로세스는 각각 독립적으로 실행함 #include #include pid_t..

article thumbnail
[LinuxProgramming] Chapter 08. 프로세스
Study/Linux 2022. 6. 5. 17:15

Chapter 08. 프로세스 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 8.1 쉘과 프로세스 1) 쉘 - 쉘(Shell) 사용자와 운영체제 사이에 창구 역할을 하는 소프트웨어 사용자로부터 명령어를 입력받아 이를 처리하는 명령어 처리기(Command Processor) 역할 수행 * 프로세스: 실행 중인 프로그램 - 쉘의 실행 절차 쉘은 시작하면 실행 파일을 읽어 실행 시작 파일은 환경 변수와 같은 사용자의 사용 환경을 초기화하는데 주로 사용 bash의 경우 시스템 차원의 시작 파일로 /etc/profile과 /etc/bashrc를 사용하고 사용자 차원의 시작 파일로 ~/.bash_profile과 ~/.bashrc를 사용함 쉘은 시작 파일을 실행한 후에 프롬프트를 출력하고 사용자의 명령을 기다림 사..

article thumbnail
[LinuxProgramming] Chapter 07. 파일 및 레코드 잠금
Study/Linux 2022. 4. 25. 16:16

Chapter 07. 파일 및 레코드 잠금 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 7.1 파일 잠금 1) 파일 및 레코드 잠금의 필요성 - 프로세스 사이에 데이터는 한 프로세스가 파일에 쓴 내용을 다른 프로세스가 읽음으로써 데이터를 주고받을 수 있음 - 문제점 한 프로세스가 파일 내용을 수정하는 동안에 다른 프로세스가 그 파일을 읽는 경우 두 개의 프로세스가 하나의 파일에 동시에 접근하여 데이터를 쓰는 경우 - 잠금(lock): 한 프로세스가 그 영역을 읽거나 수정할 때 다른 프로세스의 접근을 제한 잠근된 영역에 한 번에 하나의 프로세스만 접근 특히 레코드 쓰기(혹은 수정)를 할 경우 대상 레코드에 대해 잠금을 해서 다른 프로세스가 접근하지 못하게 해야 함 접근하는 프로세스 A가 대상 레코드에 ..

article thumbnail
[LinuxProgramming] Chapter 06. 파일 시스템
Study/Linux 2022. 4. 25. 15:15

Chapter 06. 파일 시스템 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 6.1 파일 시스템 1) 파일 시스템 구조 - 부트 블록(Boot block) 파일 시스템 시작부 위치, 첫 번째 섹터 차지 유닉스/리눅스가 처음 시작될 때 사용되는 부트스트랩 코드가 저장되는 블록 - 슈퍼 블록(Super block) 전체 파일 시스템에 대한 정보 저장 파일 시스템 내의 총 블록 수, 사용 가능한 i-노드 개수, 사용 가능한 블록들을 나타내는 비트 맵, 블록의 크기, 사용 중인 블록 수, 사용 가능한 블록 수 - i-리스트(i-list) 각각의 파일을 나타내는 i-노드들의 리스트 한 블록은 약 40개 정도의 i-노드 포함 - 데이터 블록(Data block) 파일의 내용(데이터)을 저장하기 위한 블록 2)..

article thumbnail
[LinuxProgramming] Chapter 05. 파일 입출력
Study/Linux 2022. 4. 25. 15:14

Chapter 05. 파일 입출력 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 5.1 시스템 호출 1) 컴퓨터 시스템 구조 - 하드웨어는 CPU, 메모리, 저장장치, 주변장치 등으로 구성 - 운영체제는 하드웨어를 운영 관리하는 시스템 소프트웨어이며 유닉스/리눅스의 경우 커널(kernel)이 하드웨어를 운영 관리 - 운영체제 서비스 프로세스 관리 파일 관리 메모리 관리 통신 관리 주변 장치 관리 2) 시스템 호출 - 시스템 호출(system call): 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 - 시스템 호출은 커널에 서비스를 요청하기 위한 프로그래밍 인터페이스로 응용 프로그램은 시스템 호출을 통해서 커널에 서비스를 요청 가능 3) 시스템 호출 구현 주요 자원 시스템 호출 파일 open..

article thumbnail
[Linux] GRUB 부트로더
Study/Linux 2021. 10. 25. 21:44

# GRUB 부트로더 - GRUB 부트로더: CentOS를 부팅할 때 처음 나오는 선택 화면 - 기본적인 특징 > 부트 정보를 사용자가 임의로 변경해 부팅할 수 있음 > 즉, 부트 정보가 올바르지 않더라도 수정하여 부팅할 수 있음 > 대화형 설정을 제공하므로 커널 경로와 파일 이름만 알면 부팅이 가능 - GRUB 2 버전을 사용 > 셸 스크립트를 지원함으로써 조건식과 함수를 사용할 수 있음 > 동적 모듈을 로드할 수 있음 /boot/grub2/i386-pc/ 디렉터리에 mod 파일로 존재 > 그래픽 부트 메뉴를 지원하며 부트 스플래시 성능이 개선됨 > ISO 이미지를 이용해서 바로 부팅할 수 있음 > 설정 파일의 형식이 변경되었지만 더 향상된 내용을 포함할 수 있음 - GRUB 2의 설정 파일: /boo..

article thumbnail
[Linux] root 사용자 비밀번호 분실 - 응급 복구
Study/Linux 2021. 10. 25. 04:36

# 응급 복구 - root 사용자의 비밀번호를 잊어버려 로그인하지 못하는 경우 1) GRUB 메뉴 화면에서 위 메뉴가 선택된 상태에서 키보드 E를 누름 2) 키보드의 아래쪽 "linux16 ($root) /boot/vmlinuz ~" 행에 커서를 가져다 놓음 > end를 눌러 행 끝으로 이동한 후 뒤쪽의 'rhgb quiet'을 삭제하고 'init=/bin/sh"를 입력 3) crtl + x를 눌러 부팅 4) 별도의 로그인 없이 부팅되어 'sh4-4#'이라는 프롬프트가 나옴 5) whoami 명령으로 현재 로그인된 사용자 확인 6) root 사용자의 비밀번호를 변경하기 위해 passwd 명령을 입력하고 새로운 비밀번호 8자 이상을 지정 > 현재 '/'파티션이 읽기 전용으로 마운트 되었기 때문에 오류가 발..

article thumbnail
[Linux] 서비스와 소켓
Study/Linux 2021. 10. 25. 04:16

# 서비스 - 서비스: 서버 프로세스 - 시스템과 독자적으로 구동 및 제공되는 프로세스 > 웹 서버(httpd), DB 서버(mysqld), FTP(vsftpd) 서버 등을 예로 들 수 있음 - 실행 및 종료: systemctl 서비스이름 > 웹 서버는 systemctl start httpd 명령으로 구동 - 자동으로 재부팅 후 뜨지 않으므로 ntsysv에서 설정 필요 - 서비스의 실행 스크립트 파일: /usr/bin/systemd/system 디렉터리에 '서비스이름.service'라는 이름으로 확인 가능 > 이 파일들은 대부분 systemctl 서비스이름 명령으로 실행/중지/재실행할 수 있음 - 부팅과 동시에 서비스의 자동 실행 여부를 지정할 수 있는데, 터미널에서 systemctl list-unit-..

[Linux] 프로세스, 데몬, 서비스
Study/Linux 2021. 10. 25. 03:33

# 프로세스 - 하드디스크에 저장된 실행 코드가 메모리에 로딩되어 활성화된 것 - 포그라운드 프로세스 > 실행화면에 나타나서 사용자와 상호 작용하는 프로세스 - 백그라운드 프로세스 > 실행은 되었지만 화면에 나타나지 않고 뒤에서 실행되는 프로세스 > 예를 들어 백신, 서버 데몬 등은 눈에 보이지 않지만 실행됨 - 프로세스 번호 > 메모리에 로딩되어 활성화된 프로세스를 구분하려면 각각의 고유 번호가 필요 > 각각의 프로세스에 할당된 고유 번호를 프로세스 번호라고 함 > 활성화된 프로세스를 메모리에서 강제로 제거하려면 프로세스 번호를 사용해야 함 - 작업 번호 > 현재 실행되는 백그라운드 프로세스의 순차 번호를 의미함 - 부모 프로세스와 자식 프로세스 > 모든 프로세스는 혼자 독립적으로 실행되는 것이 아니라..