레이블이 os인 게시물을 표시합니다. 모든 게시물 표시
레이블이 os인 게시물을 표시합니다. 모든 게시물 표시

2021-11-09

1109 리눅스 os 실습하기~!!

 

ulimit -a 로 open 할수있는 파일수를 확인해본다. !

 65535개. max-user thread는 unlimited다. 이럴수가..




음? 근데 커널레벨 max-thread를 확인해보니 7702개다. 음~~왜 다르지?

리눅스는 스레드=프로세스일테니까 그건 상관없을테고... 흠. 일단 실험해보자!!


sudo vi /etc/security/limits.conf

nofile : 열수있는 파일수를 100으로 수정한뒤에 !! 다시 재로그인해보았다!



100으로 바뀌어있는것을 확인해볼수있당!!^@^ 끼얏호~~~


마찬가지로 max user process 도 100으로 수정한다 ^^후후후.

2021-10-02

1002 리눅스 명령어 : date, uptime,passwd,uname

 # date

- 현재 날짜와 시간을 출력하는 명령어

- root사용자의 경우 -s (setting)옵션 사용하여 시간설정 가능

# uptime

- 시간, 사용자, 접속율 통계

- 현재시간, 시스템 가동시간, 접속한 사용자 수, 평균 시스템 부하 확인가능

# passwd

- 비밀번호 설정관련 명령어

- passwd [사용자이름] : 해당 유저의 패스워드 변경

# uname

- 시스템 정보 출력

- uname -a : 모든 정보 출력

- 옵션 :

  -m, --machine   머신(하드웨어) 타입을 출력한다.

 

  -n, --nodename  머신의 네트웍 노드 호스트명을 출력한다.

 

  -r, --release   운영체제 릴리즈 넘버를 출력한다.

 

  -s, --sysname   운영체제의 이름을 출력한다.

 

  -v  운영체제의 버전을 출력한다.

 

   -p  프로세서 종류 출력. x86_64

  -s 커널(운영체제) 이름 출력. Linux

- o OS이름 출력. Linux/CLI

2021-09-12

0912 운영체제와 스레드

 1. 운영체제의 역할중 중요한 것 : process관리, 프로세스 스케쥴링 & 동기화 문제 해결.

2. 프로세스 스케쥴링을 위한 다양한 큐

1) 하드웨어-> 메모리 2) 메모리 -> cpu 3) 메모리 -> 하드웨어 (임시해제. 한동안 해당 프로세스가 쓰이지 않을때 꺼져!! 하고 돌려보냄)

2) > 3) > 1)순으로 자주 일어난다. 

3. 편의상 프로세스 스케쥴링이라고 말하고 있지만- 사실 현대의 운영체제는 그것보다 훨씬훨씬 똑똑하다. 스레드 스케쥴링을 한다. p1프로세스의 1번스레드 2번스레드 돌리다가 p2프로세스의 a번 b번 돌리다가 하는 식이다. 스레드 스케쥴링을 위해서 해당 스레드 정보를 운영체제의 pcb영역에 저장했다가 돌아오면 restore하는 식으로 계속 context switching을 한다. 

그래서 스레드를 무작정 많이 만들어도 안좋은게 , context switching을 해야하는 비용이 많이 들고, 아무리 경량 프로세스라고 하더라도 스레드를 만드는 비용 ( code영역, data영역 생성등..) 이 있기 때문에. 적정 스레드 수를 유지하는 것이 중요하다. 

4. 스케쥴링 기법 : FIFO, priority , SJF, 라운드로빈(time- slicing) , 다단계 피드백 큐, 다단계 큐 등

5. 선점형 스케쥴링 vs 비선점형 스케쥴링 : 선점형은 우선순위에 따라서 cpu점유를 뺏길수있고, 비선점은 한번 cpu점유에 들어가면 뺏기지 않음. 

6. 스레드 동기화생각해야 하는 이유?

자바나 c같은 하이랭귀지 언어에서는 사실상

balance += money;

이렇게 한줄로 끝나는데. 사실 이걸 어셈블리어로 변환하면

1) money 데이터를 메모리에서cpu 레지스터로 load하고->

2) balance 데이터를 메모리에서 cpu 레지스터로 load하고-> 

3) add 한다

라는 여러 과정이 함축되어있음 . 

그래서 저 1,2,3과정중에서 여의치 않게 context switching이 일어나면 - 비정상적인(의도치않았던) 결과를 받아보게 되는 것이다. 

0912 운영체제와 프로세스

 1. 운영체제의 역할 : 하드웨어 자원관리, 성능(performance) , 편리성, 보안

2. 여러 사용자가 하나의 컴퓨터를 이용하는 경우 - 대표적으로, 서버컴퓨터를 생각할 수 있다.

여러명의 유저가 수강신청을 하기위해 하나의 서버 컴퓨터를 이용한다.

이때 만약 어떤 유저가 마음대로 하드웨어 자원에 접근할 수 있다면?? 해당 컴퓨터를 못쓰게 만들수도 있고, 다른 유저의 데이터를 마음대로 훔쳐볼 수도 있게된다.

이러한 보안 문제관련, 운영체제는 하드웨어 자원을 유저가 직접관리하도록 하는것이아니라 운영체제에게 맡기도록 한다. 만약 유저가 이러한 룰을 위반하고 맘대로 스스로 건드리려고 하면- 해당 프로세스는 중지된다. 

대표적으로 io자원을 생각할 수 있다. 자바로 프로그래밍할때 우리는 직접 하드웨어 자원이 어디있는지 명시적으로 알고 사용하지 않는다. 실제로는 디스크의 어딘가에 물리적으로 저장되어 있을테지만 그 위치를 우리가 찾아서 사용할 필요가 없다. 그냥 이 위치의 이 이름 파일을 불러줘~~ 하고 형식만 맞추어서 (스트림이든 버퍼든 채널이든) 운영체제에게 넘기면, 운영체제가 그것을 처리해준다. 개발자의 영역이 아니기 때문에 Exception을 반드시 걸어야 하는것 같다(이건 나의 추측)

그래서 어떠한 프로세스가 컴퓨터 메인메모리에 올라와있을때, 이 프로세스는 계속해서 user mode 와 system mode를 왔다갔다하는 상태를 겪는다.


3. 프로세스와 프로그램?

프로그램은 단순히 하드웨어에 저장되어 있는 실행파일에 지나지 않다. 이것은 무덤속에 가만히 누워있는 것과 똑같다.

프로세스는 메인메모리에 올라와있는 프로그램, 즉 실행중인 - 살아있는 작업이다. job이라든지 task라든지 여러 단어가 존재하는데 같다고 생각해도 좋다.

하드웨어 속에서 죽어있는 프로그램이 - 메인메모리에 올라와서 프로세스가 된다.

4. 프로세스의 상태

프로세스는 여러 상태변화를 가진다. 무덤속에 있을때는 잠잠했던 세상이 별세상이 되고 온갖 소리와 변화를 경험한다.

NEW - READY - RUNNING - WAITING - TERMINATED

NEW는 말그대로 생성되어 초기화되는 단계이고, 메모리에 완전히 올라와서 초기화가 종료되면 그때부터 cpu에게 처리될 수 있는 READY상태가 된다. 

그리고 실제로 cpu에게 처리되고있는 상태를 RUNNING상태라고 한다. 

단 우리는 multiprogrmming컴퓨터를 이용하고 있기 때문에, io작업 등 cpu의 연산능력을 필요로 하지않는- 다른 하드웨어 부서를 이용해야 하는 작업이 요구될경우 자연스럽게 자리를 양보하며 waiting 상태로, 그리고나서 io를 끝내고 ready큐로 다시 들어와서 기다린다.

여기에 플러스, time sharing을 이용하고 있기 때문에 - running에서 - 할당된 시간이 종료되념 다시 ready큐로 들어온다.

결국 ready-running-waiting의 상태에서 빙빙빙 계속 돌다가, 프로세스가 종료되면 그제서야 terminated되며 메인메모리로부터 할당이 해제되는 것이다. 

2021-09-11

0911 운영체제의 이해

 1. 운영체제의 역할 : 하드웨어제어, 성능, 편리성

특히 하드웨어 제어역할 매우 중요. 운영체제는 마치 정부와 같다. 다양한 리소스(국토, 돈, 사람등등..) 을 제어하여, 야생마와 같은 컴퓨터를 관리하는 것이다. 

하드웨어 리소스의 종류 : cpu, 랜카드(네트워크 통신담당), 메인 메모리, 마우스, 키보드, 모니터, 등등 모든 물리적인 것들 포함한다. 컴퓨터안의 작은 장치들 모두모두!!

mount 와 umount같은 명령어가 왜 있는거지 생각했는데 - 내가 당연히 생각하고 있었던. 하드웨어와 하드웨어의 연결을 위한 아주 중요한 명령어였던 것이다!! (요새는. plug& play로 자동지원되니까.. 이런 생각 자체를 해본적이 없었다. )

정부는 다양한 부서가 있고, 부서별로 명령을 내려서 해당 자원이 효율적으로 사용될 수 있도록 사령탑. 운영체제도 이와 똑같다. 스스로 일을 하는 것은 아니고, 명령을 내리는 사령탑이고 지휘관이다. 그중 단연 톱으로 중요한 부서는 processor를 제어하는 부서이다. 

컴퓨터를 구성하고 있는 다양한 요소 중 cpu는 연산을 담당하는데 , 이 연산을 위해서는 메모리 공간 (연산결과를 저장) & processor가 필요하다. 이것을 운영체제가 알아서 해준다. 운영체제가 없었다면 우리는 프로그램을 실행하기 위해 일일이 load하고 제어하는 일을 해야했을 것이다..

2. 멀티프로세싱

여러개의 작업을 실행할 수 있다. 단일cpu 라고 가정했을때. cpu는 연산만 담당하기 때문에 출력을 요청하면- 그동안 idle한 상태가 된다. 이것은 매우비싼 자원인 컴퓨터를 이용하는 입장에서. 매우 불만인 것이다. 쉼없이 일해라 cpu!!이를 위해서, - 아 그럼, 메모리에 여러개 프로세스를 올려두고, io작업이 일어나면 다른 프로세스를 바로 돌릴수있게 하자. 하는 식으로 디자인하게 되었다.

이것때문에 고민해야 할 것들이 많아졌다. -> 메모리의 어디에 해당 프로세스를 저장할 것인가? 하는 장소문제. 프로세스들을 어떤 순서로 돌릴것인가? 하는 스케줄링 시간문제. 

3. time-sharing 시분할.

엄청나게 짧은 시간동안 멀티프로세싱을 돌리면, 너무 빨라서 마치 동시에 여러 작업이 수행되는 것처럼 느껴진다. 이를통해, interactive한 컴퓨터를 구현할 수 있게 되었다. 매우매우슬로우모션으로 본다면, 사실은 한번에 한개의 작업만 처리하고 있다. 하지만 너무너무 빨라서, 우리는 마치 컴퓨터가 바로바로 나의 요청에 응답해주는 것처럼 느낀다.

4. 인터럽트 기반 

interrupt란 무엇인가? 이것은 마치 운영체제에게 야~!! 하고 말거는 것이다. 지금 하는 일을 중단하고 어떠한 루틴을 수행하라! 라고 말하는 것이다. 운영체제는 ROM에서 부팅되어 RAM에 상주하고 있다. 그리고 어떠한 이벤트를 통해 interrupt가 발생하면, 운영체제는 해당 이벤트에 묶인 루틴을 수행한다. 

이 인터럽트에는 하드웨어기반 인터럽트와 소프트웨어 기반 인터럽트가 있다. 하드웨어 기반은 쉽게생각하면 마우스 움직이기. 사용자가 마우스를 움직이는 이벤트- 인터럽트가 발생했고, 운영체제는 user mode에서 kernel mode로 들어가서 , 해당 인터럽트에 해당하는 루틴을 수행한다(즉, 마우스를 움직인 것을 모니터 화면으로 보여주는 루틴 . 이것을 위해서는 모니터 하드웨어의 협력을 명령하게 될 것이다.) 

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...