728x90
반응형
SMALL

안녕하세요, 처음 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

직접 repl.it 웹 사이트를 통해서 멀티 스레드 및 같은 프로세스를 공유하는 것을 확인해 보았습니다.

  • 멀티 스레드 테스트 코드

프로세스에 멀티 스레드를 적용한 방식입니다.

pid값을 통해 각각의 스레드는 같은 프로세스를 갖지만, 

각각의 스레드는 각각의 고유 스레드 id값을 갖는 것을 확인할 수 있습니다.

*threading: thread를 생성하기 위한 라이브러리

*os: pid를 확인하기 위한 라이브러리

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=yTZ1ECY2Vjc&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=33

 

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 복습한 자료를 남깁니다.

  • 실습 자료

repl.it 사이트를 통해서 Python을 직접 설치하지 않고 멀티 프로세스를 테스트해보았습니다.

그 결과로, 부모의 pid는 같지만

자식의 pid들은 서로 다르게 찍히는 것을 볼 수 있습니다.

자식 프로세스들을 많이 만듦을 통해서 다른 작업들을 수행할 수 있습니다.

*os: pid를 읽기 위해 사용된 라이브러리

*Process: process를 만들기 위해 사용된 라이브러리

 

감사합니다.

참고 url을 남깁니다.

https://www.youtube.com/watch?v=XexLQRaKoTA&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=32

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

소프트웨어적인 스레드를 의미한다.

프로그래밍은 스레드를 고려하여 대부분 진행된다.

멀티 스레드와 멀티 프로세스가 어떻게 다른지 학습해보도록 하겠다.

  • 들어가며

  • 단일 프로세스

  • 멀티 스레드

프로세스를 이루는 프로세스를 위한 여러 명령어를 동시에 실행이 가능할 수 있다.

  • 스레드의 구성 요소

스레드들은 그 프로세스의 자원을 공유하면서 실행하면 좋겠다.

스레드는 실행 흐름의 단위이다.

리눅스는 프로세스와 스레드를 임의적으로 구분하지 않는다.

요즘 운영체제들은 cpu에게 전달을 할 때 프로세스 단위가 아니라 스레드 단위로 전달을 한다.

 

  • 멀티 프로세스와 멀티 스레드 비교

프로세스끼리는 기본적으로 서로 서로 자원을 공유 하지 않지만

스레드끼리는 같은 프로세스 내의 자원을 공유하면서 실행된다.

  • 멀티 프로세스

 

  • 멀티 스레드

스레드만큼 유리하지는 않을 뿐 프로세스 간에도 자원을 주고 받을 수 있다. IPC라는통신을 통해서 자원을 주고 받을 수 있다. IPC 통신은 같은 컴퓨터안에서 자원을 서로 주고 받는 통신이다. (예. 파일 통신, 공유 메모리 간 통신)

파일 통신: 서로의 프로세스가 연관이 되어 있다면 자원을 주고 받는 통신을 할 수 있다.

공유 메모리 간 통신: 프로세스들끼리 공유하는 메모리를 만들어서 통신을 주고 받는 것.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=zUGvpUtNlwI&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=31

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 내용을 남깁니다.

  • 들어가며

동시에 실행되는 각각의 프로세스의 실행 상태를 볼 수 있다.

이를 계층적으로 관리합니다.

  • 공통적으로 실행되는 프로세스 상태

*운영체제마다 조금씩 차이가 있음

  • 생성 상태

  • 준비 상태

  • 실행 상태

  • 대기 상태

  • 종료 상태

  • 프로세스 상태 다이어그램

  • 프로세스의 계층 구조

프로세스는 계층적인 구조를 형성합니다.

  • 프로세스의 계층 구조

최초의 프로세스는 부팅시 실행되는 프로세스입니다.

  • 프로세스의 계층 구조의 예

최초의 프로세스 -> 로그인 프로세스 -> bash 프로세스 -> vim 프로세스

  • 최초의 프로세스 (pstree)

systemd: 최초의 프로세스

macos의 경우 launchd 입니다.

  • 프로세스 생성 기법

부모 프로세스는 자식 프로세스를 어떻게 생성할까?에서 시작합니다.

 복제와 옷 갈아입기 -> 많은 운영체제에서는 복제와 옷 갈아입기라는 과정을 거쳐서 부모 프로세스에서 자식 프로세스가 생성됩니다.

부모 프로세스는 자식 프로세스를 복제를 통해 생성 (fork 시스템 호출)

저장되어 있는 메모리의 위치는 다릅니다.

자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출입니다.

코드 영역, 데이터 영역은 새로운 프로세스 영역으로 되고 나머지 영역은 초기화됩니다.

fork() 명령어로 자식 프로세스를 다른 메모리에 복제를 하고 나서 (복제)

exec() 명령어를 통해서 새로운 영역을 덮어써서 실행이 됩니다. (옷 갈아입기)

이를 통해서 프로세스의 계층 구조가 만들어진다. 병행 실행되는 구조이다.

이를 Fork-exec 구조라고도 한다.

감사합니다.

참고 url - https://www.youtube.com/watch?v=wz9C_vqME8g&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=30

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조와 운영체제를 공부하고 학습한 내용을 남깁니다.

  • 들어가며

이러한 과정을 프로세스를 생성한다라고 한다.

  • 작업 관리자를 통한 현재 실행중인 프로세스 확인

  • 리눅스, macOS에서는 [ps 명령어]를 통해 현재 실행중인 프로세스를 확인할 수 있다.

  • 프로세스에는 크게 두 종류가 있다. 사용자가 볼 수 있는 프로세스와 사용자가 볼 수 없는 프로세스이다.

데몬(daemon), 서비스(service) : 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스

  • 모든 프로세스는 CPU가 필요하다.

  • 자신의 차례에 정해진 시간 만큼만 프로세스들은 CPU를 이용

*타이머 인터럽트는 클럭을 이용해서 하드웨어에 주기적으로 발생하는 인터럽트이다. 한정된 시간 동안 프로세스는 CPU를 이용한다. 그리고 다음 프로세스에게 CPU를 양보한다.

  • 이를 활용하는 자료 구조를 프로세스 제어 블록 (PCB)

상품에 달려있는 태그와 같은 정보. 프로세스와 관련된 정보를 저장하는 태그 정보. 옷의 태그와 비슷하다.

커널영역에 PCB가 생성이 되고, 프로세스가 종료가 되면 이 PCB는 폐기된다.

이 프로세스와 관련된 온 갖 정보들을 저장한다. 

  • 대표적인 PCB에 담기는 정보. (운영체제마다 다를 수 있다.)

  • 프로세스를 특정하기 위한 숫자 (PID)

작업 관리자에서 확인 가능.

  • 레지스터 값

각각의 프로세스는 CPU안에 있는 여러 레지스터들을 사용한다. (프로그램 카운터, 스텍 포인터)

  • 프로세스의 상태

  • CPU 스케줄링 정보

  • 메모리 정보

주소 지정을 위한 주소값들이 메모리 정보에 저장됩니다.

페이지 테이블 정보가 담긴다.

페이지 테이블은 메모리의 현재 주소를 알 수 있는 정보다.

  • 사용한 파일과 입출력장치 정보

  • 문맥 교환 (프로세스의 진행절차가 실질적으로 어떻게 진행 되는가의 대한 정의)

이전 정보를 백업하고, 이러한 중간 정보를 문맥 (context)라고 한다.

-> 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리.

  • 문맥 교환의 과정

  • 프로세스의 메모리 영역

  • 코드 영역

데이터가 아니라 CPU가 실행할 명령어가 담기는 영역

전역 변수: 전체 영역에서 사용할 수 있는 변수, 프로그램이 실행되는 내내 유지되어할 변수가 담긴다.

*코드 영역과 데이터 영역은 고정되어 있습니다. 그래서 정적 할당 영역이라고 합니다.

  •  힙 영역

프로그래머가 직접 필요한 만큼 메모리에 직접 할당할 수 있는 저장 공간

이후에 공간을 반환을 해야 한다.

요즘에는 프로그래밍 언어가 알아서 반환해주는 경우도 있다. 이를 가비지 컬렉션이라고 한다.

C언어의 경우에는 가비지 컬렉션이 없다. 그래서 일일이 메모리 공간을 반환해주어야 한다.

메모리 공간을 반환해주지 않으면 메모리 누수(= memory leak)이라고 부른다.

  • 스택 영역

데이터가 잠깐 일시적으로 저장될 공간을 스택 영역이라고 부른다.

"힙과 스택 영역은 프로그램이 실행되는 과정에서 동적으로 크기가 변할 수 있다."

"프로그래머가 언제든지 정의한 변수가 사용될 수 있기 때문"

  • 힙 영역과 스택 영역의 할당

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=Jjfah3t_xWk&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=29

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조와 운영체제를 공부하고 학습한 내용을 남깁니다.

  • 시스템 호출 - strace /bin/ls

아주 간단한 명령어 같지만, 실제로 시스템 콜은 굉장히 빈번하게 일어납니다.

  • 리눅스 환경에서 c 프로그램을 작성한 예제

  • 리눅스 환경에서 c 프로그램을 실행한 결과 "hello, hongong!"

  • strace ./a.out 의 결과

또한, 수많은 시스템 콜들이 호출된 것을 볼 수 있다.

  • sudo dtruss /bin/ls

sudo는 관리자 권한으로 실행과 비슷한, 루트 권한으로 실행하는 명령어이다.

macos에서는 dtruss라는 명령어로 시스템 호출을 조회할 수 있다.

위 이미지는 /bin/ls를 macos환경에서 dtruss해서 시스템 호출을 한 결과이다.

 

"리눅스 환경에서의 시스템 호출과 macos환경에서의 시스템 호출은 다르다."

"리눅스와 macos는 운영체제의 결이 같은 포식스 방식이지만 윈도우는 결이 다르다."

"윈도우 시스템 호출을 위해서는 다른 오픈소스들을 적용해서 확인해볼 수 있다."

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=BoJ1eaE5F-I&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=29

 

 

728x90
반응형
LIST
728x90
반응형
SMALL

들어가며 

 

 

운영체제는 프로그램한테 제공해주는 기능은 다양합니다.

아이폰과 안드로이드 폰이 제공해줄 수 있는 기능이 다르다.

 

자동차의 엔진, 사람의 심장과 같은 역할

 

커널은 운영체제의 핵심기능을 담당하는 한 부분

유저 인터페이스는 아이콘 또는 마우스로 조작할 수 있는 그래픽 인터페이스가 있고 커맨드 라인 인터페이스가 있습니다.

유저 인터페이스는 커널로 부터 도움을 받음

 

자원에 직접 접근을 하면 위험하다.

 

운영체제의 코드를 실행해야 한다.

 

 

 

슈퍼바이저 플래그로 사용자 모드와 커널 모드를 구분할 수 있다.

 

이중 모드는 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분

 

 

시스템 호출은 커널모드로 진입하기 위해서 운영체제에게 부탁하는 것이다.

각 명령어를 통해서 시스템을 호출하고 해당 명령어를 수행한다.

 

 

 

 

 

메모리에 적재되고 실행되는 프로그램을 프로세스라고 한다.

메모리에 적재되서 동시에 실행되고 있는 여러 프로세스를 관리해준다.

 

 

 

 

 

 

 

 

보조기억장치에 있는 데이터들을 파일 단위로 묶어서 저장 장치에 보관

파일들을 묶어서 폴더(디렉터리) 단위로 저장 장치에 보관

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=R4j_hDQuBOc&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=27

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조와 운영체제를 공부하고 복습한 자료를 남깁니다.

감사합니다.

 

운영체제 = 가장 근원적인 프로그램

프로그램을 동작 시키는 것 외에 다양한 기능들이 있다.

 

운영체제란

모든 프로그램은 실행을 위해 자원을 필요로 한다.

프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

 

자원/시스템 자원

프로그램 실행에 있어 마땅히 필요한 요소

컴퓨터의 네 가지 핵심 부품 포함!

네트워크 패킷, 파일 등이 자원에 포함될 수 있음

 

커널 영역: 운영체제

사용자 영역: 웹 브라우저, 메모장, 게임 등

 

운영체제의 메모리 관리

 

운영체제의 CPU 관리

 

운영체제의 입출력 장치 관리

 

 

 

운영체제의 시스템은 정부와 비유할 수 있다.

 

운영체제가 없다면 아래와 같은 어려움을 겪는다.

 

 

"운영체제는 사용자를 위한 프로그램이 아니다."

"운영체제는 프로그램을 위한 프로그램이다."

 

운영체제를 통해 컴퓨터와 대화는 불가능 하지만, 오류 메시지를 통해서 대화를 할 수 있다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=1PEe33_INZc&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=25

 

 

728x90
반응형
LIST

+ Recent posts